我是Perl的新手,我正在尝试创建一个连接到我的Oracle SQL Server数据库的脚本,并通过电子邮件返回表查询的结果。我遇到了数据库连接部分的问题。我应该从哪里开始?任何示例代码将不胜感激。谢谢,
答案 0 :(得分:1)
下面是一些使用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 documentation page。
答案 1 :(得分:1)
首先,您应该了解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
中找到更多连接选项答案 2 :(得分:0)
我有几十个执行 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。在集成到脚本之前删除程序。
我知道很多人会说这是一个糟糕的解决方案,但我们会提供包含数十万行数据的数据。