我发现很难通过 perl 脚本调用存储过程(oracle)来获取记录。SP 接受 1 个输入,输出参数是光标
--------这里是perl脚本_----------------
my $dbh = DBI->connect("dbi:Oracle://**********",'**',***) or die "Couldn't connect to database: " . DBI->errstr;// successfully connected
my $cursorRecords;
my $categoryBind = 'tkuat';
my $sth= $dbh->prepare(q{
BEGIN
GetJobEnvironments(:category,:cursorTest);
END;
});
$sth->bind_param(":category", $categoryBind);
$sth->bind_param_inout(":cursorTest", \$cursorRecords,20000,{ ora_type => ORA_RSET});
$sth->execute or die "Can't execute SQL statement\n";
my @row=$cursorRecords->fetchrow_array();
print("row:@row\n");
print("cursorRecords:$cursorRecords\n");
print Dumper($sth);
script is executing but not printing the records from the database
---O/p:--------
row:
cursorRecords:DBI::st=HASH(0x1564318)
$VAR1 = bless( {}, 'DBI::st' );
------------------------------
SP in Database looks as below
create or replace PROCEDURE GetJobEnvironments
(
v_category IN CHAR DEFAULT NULL,
v_cursor OUT SYS_REFCURSOR
)
AS
BEGIN
IF ( v_category IS NULL ) THEN
BEGIN
OPEN v_cursor FOR
SELECT EnvVar ,
VALUE
FROM JobEnvironments ;
END;
ELSE
BEGIN
OPEN v_cursor FOR
SELECT EnvVar ,
VALUE
FROM JobEnvironments
WHERE Category = v_category ;
END;
END IF;
EXCEPTION
WHEN OTHERS THEN raise_application_error(-20002,SQLCODE||':'||SQLERRM);
END;
表JobEnvironments也有记录
中的引用bind() $cursorRecords可以保存表中的记录吗?有人可以帮忙吗?
----从表中记录-----
select * from JobEnvironments
Category,EnvVar,Value,last_update
-----------------------------------
tkuat','REUTFEED_SUBJ','RSF.REC',;\'2010-04-07 06:00:33.0'