簡體   English   中英

如何使用Perl連接到SQL Server

[英]How to connect to SQL Server using Perl

我是Perl的新手,正在嘗試創建一個腳本,該腳本連接到我的Oracle SQL Server數據庫並通過電子郵件返回表查詢的結果。 我在數據庫連接部分遇到麻煩。 有什么想法我應該從哪里開始? 任何示例代碼將不勝感激。 謝謝,

以下是一些示例代碼,可讓您使用Perl DBI模塊連接到Oracle 根據需要調整數據庫名稱,用戶名和密碼。

#!/usr/bin/perl
use strict;
use DBI;

my $dbName = 'mydb';
my $username = 'username';
my $password = 'password';
my $options =  { RaiseError => 1 };
my $dbh = DBI->connect("dbi:Oracle:${dbName}", $username, $password, $options);

$dbh是一個數據庫句柄,可用於執行您喜歡的所有查詢。 有關可用方法的簡要說明,請參見CPAN上的DBI文檔頁面

首先,您應該知道TNSNAMES.ORA文件,該文件具有以下形式的預定義連接:

ORA11 =
 (DESCRIPTION = 
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.0)(PORT = 1521))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = ORA12)
 )
)

(如果您碰巧在另一台計算機上,請檢查服務器主機上的上述連接)

現在您可以使用ORA11作為數據庫名稱

  my $DB = DBI->connect(
    "dbi:Oracle:",
    "USER/PASSWORD\@ORA11",
    "",
    {
      # ChopBlanks => 1,
      # AutoCommit => 0,
    },
  );

或使用完整的連接字符串代替ORA11

"USER/PASSWORD\@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.0)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORA12)))"

DBD :: Oracle中可以找到更多的連接選項

我有幾十個腳本來執行OracleSybaseMS SQL查詢。 甚至是一些腳本,它們在多個數據庫上執行查詢並合並結果,或者根據先前查詢的結果為一個數據庫建立查詢...但是經過了很多天試圖使Perl庫發揮良好作用。

對於真正的黑客,我們首先使用Oracle SQL命令行客戶端sqlplus.exe ,這使此方法很容易,但遠非如此:

my $run_sql = 'sqlplus.exe -s DBuser/DBpwd@DBname < SQLfile.sql';
my $SQLfile = "temp.sql"; 

sub GET_EMP_LIST
{
  my $status = $_[0];
  my $sql_text = "
  set linesize 150
  set pagesize 0
  set numf 99999999999
  set feedback off
  SELECT  
    EMP.FIRST          || ',' ||
    EMP.LAST           || ',' ||
    EMP.PHONE          || ',' ||
    EMP.SALARY
  FROM 
    PERSONNEL.EMPLOYEES  EMP
  WHERE
    (EMP.STATUS = '$status')
  \;";

  open (SQL, $FileOpenWrite, "$SQLfile");
  print SQL $sql_text;
  close (SQL_TEXT);
  my @Results = "$run_SQL";
  unlink $SQLfile;
  return @Results;
}

#MAIN

@Employees = GET_EMP_LIST "Active";
for (@Employees)
{
  my $temp = chomp $_;
  $temp =~ s/\s+//g;        #get rid of white spaces
  my ($FIRST, $LAST, $PHONE, $SALARY) = split /,/, $temp;

  .... do something with it ....
}

就像我說的那樣,它遠非美觀,但又快速簡便,並且可以使用SQL查詢工具(如TOAD)在集成到腳本之前通過拖放程序生成SQL。

我知道很多人會說這是一個糟糕的解決方案,但是我們引入包含數十萬行數據的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM