尝试在 perl 脚本中执行过程,Proceure ->创建或替换
PROCEDURE Getproc
(
v_catg IN CHAR DEFAULT NULL,
v_cursor OUT SYS_REFCURSOR
)
-
执行程序
my $sth = $dbh->prepare(
q{
BEGIN
Getproc(:category, :curs);
END;
}
);
-
绑定 i/p 和光标
$sth->bind_param(":category", $category1);
$sth->bind_param_inout(":curs", \$cursrecords, 0, {ora_type => ORA_RSET});
$sth->execute;
$sth->finish;
-
从光标处获取记录
while ($hashRef = $cursrecords->fetchrow_hashref) {
foreach (keys %$hashRef) {
print "hashref:$hashRef and $_ is $hashRef->{$_}\n";
}
}
第三步是不检索任何东西。curserecords=DBI::st=HASH(0x2371bd0)
这有哈希对象。有人可以帮我知道这里缺少什么吗?为什么我无法从游标中存储的表中检索行?
参考流程
create or replace PROCEDURE GetProc
(
v_catg IN CHAR DEFAULT NULL,
v_cursor OUT SYS_REFCURSOR
)
AS
BEGIN
IF ( v_catgIS NULL ) THEN
BEGIN
OPEN v_cursor FOR
SELECT EnvVar,
VALUE
FROM table;
END;
ELSE
BEGIN
OPEN v_cursor FOR
SELECT EnvVar ,
VALUE
FROM table
WHERE Category = v_catg ;
END;
END IF;
EXCEPTION
WHEN OTHERS THEN raise_application_error(-20002,SQLCODE||':'||SQLERRM);
END;
请尝试(如雷内·尼芬格的收藏 http://www.adp-gmbh.ch/perl/dbi/refcursor.html)
my $sth = $dbh->prepare(
q{
DECLARE
curs sys_refcursor;
BEGIN
Getproc(:category, :curs);
END;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)