如何使用Perl连接到SQL Server

时间:2017-08-09 20:15:50

标签: sql oracle perl

我是Perl的新手,我正在尝试创建一个连接到我的Oracle SQL Server数据库的脚本,并通过电子邮件返回表查询的结果。我遇到了数据库连接部分的问题。我应该从哪里开始?任何示例代码将不胜感激。谢谢,

3 个答案:

答案 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。在集成到脚本之前删除程序。

我知道很多人会说这是一个糟糕的解决方案,但我们会提供包含数十万行数据的数据。