0

Perl 5、バージョン 14 を使用しています。Win32::ODBC は VERSION = '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->Sql("SELECT emp_Id, emp_name, salary FROM Sample.Emp");

while($db->FetchRow())
{
@values = $db->Data; 
print @values;
}
$db->Close();

Perl プログラムでクエリを使用する代わりに、ストアド プロシージャを使用するのが好きです。というストアド プロシージャを作成しましたsp_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 でストアド プロシージャを使用してデータを取得する方法を知りたいです。

お時間をいただきありがとうございます。

4

2 に答える 2

1

Win32::ODBC を使用する代わりに、DBIモジュールを使用することもできます。また、 Oracle DB インターフェースも必要です。

スクリプトは次のようになります。

#!/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();
于 2013-01-20T17:08:34.213 に答える
0

私の推測では、WIN32::ODBC はこれに最適なモジュールではありません。DBI および DBD::Oracle モジュールを検討します。

DBD::Oracle ドキュメントの DBD ::Oracle PL/SQL_Examplesをチェックしてください。

于 2013-01-20T16:57:22.977 に答える