问题描述
尝试在perl脚本中执行过程,过程->创建或替换
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,{ora_type => ORA_RSET}); $sth->execute; $sth->finish;
-
从游标中获取记录
while ($hashRef = $cursrecords->fetchrow_hashref) { foreach (keys %$hashRef) { print "hashref:$hashRef and $_ is $hashRef->{$_}\n"; } }
第3步未检索任何内容。 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;
解决方法
请尝试(如René Nyffenegger's collection)
my $sth = $dbh->prepare(
q{
DECLARE
curs sys_refcursor;
BEGIN
Getproc(:category,:curs);
END;
});