[英]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中可以找到更多的連接選項
我有幾十個腳本來執行Oracle , Sybase和MS 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.