使用Win32:ODBC执行Oracle存储过程
我使用的是Perl5,版本14。Win32::ODBC的版本为“0.034”;Oracle作为数据库 我能够通过以下代码使用诸如“emp_id,emp_name from emp”之类的查询从数据库中检索信息使用Win32:ODBC执行Oracle存储过程,oracle,perl,odbc,Oracle,Perl,Odbc,我使用的是Perl5,版本14。Win32::ODBC的版本为“0.034”;Oracle作为数据库 我能够通过以下代码使用诸如“emp_id,emp_name from emp”之类的查询从数据库中检索信息 use Win32::ODBC; $db= new Win32::ODBC("DSN=datasourcename;UID=username;PWD=passwrd") || die "Error: " . Win32::ODBC::Error(); $db->
use Win32::ODBC;
$db= new Win32::ODBC("DSN=datasourcename;UID=username;PWD=passwrd")
|| die "Error: " . Win32::ODBC::Error();
$db->Sql("SELECT emp_Id, emp_name, salary FROM Sample.Emp");
while($db->FetchRow())
{
@values = $db->Data;
print @values;
}
$db->Close();
我喜欢使用存储过程,而不是在Perl程序中使用查询。我创建了一个名为sp\u rank
的存储过程
PROCEDURE sp_rank(p_cursorVar out CursorType)
is
begin
open p_cursorVar for
select emp_id, emp_name from emp;
End sp_rank;
我想知道如何在Perl中使用存储的proc并检索数据
谢谢您的时间和考虑。我想WIN32::ODBC不是最好的模块。我将研究DBI和DBD::Oracle模块
请查看DBD::Oracle文档。除了使用Win32::ODBC,您还可以使用该模块。您还需要 您的脚本可能如下所示:
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $datasource = "datasourcename";
my $username = "foobar";
my $password = "secret";
# connect to your database with a database handle
my $dbh = DBI->connect("DBI:Oracle:$datasource",$username,$password) or die $DBI::errstr();
# create a statement handle for database interaction
my $sth = $dbh->prepare("SELECT emp_Id, emp_name, salary FROM Sample.Emp");
$sth->execute();
# fetch the rows and print them
while($sth->fetchrow_arrayref()){
@values = @$_;
print @values;
}
# never forget to close your statement handle
$sth->finish();
# using your stored procedure
# overwrite your finished statement handle with a new one
$sth = $dbh->prepare("sp_rank()");
$sth->execute();
# fetch all your data into an array hashref structure. the column names in your DB are the keys in the hashref
my $data = $sth->fetchall_arrayref({});
$sth->finish();
$dbh->disconnect();
我的主管希望我使用Win32::ODBC模块。我希望使用Win32::ODBC调用存储过程,而不是使用DBI