oracle - 在 perl 脚本中使用输入参数和输出游标调用存储过程
问题描述
尝试在 perl 脚本中执行过程,Proceure -> create or replace
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;
解决方案
请尝试(如René Nyffenegger 的收藏)
my $sth = $dbh->prepare(
q{
DECLARE
curs sys_refcursor;
BEGIN
Getproc(:category, :curs);
END;
});
推荐阅读
- adb - 如何删除 ADB 中存储的用户帐户?
- apache - Elasticbeanstalk - Apache 配置
- json - 预计解码数组
但找到了一本字典。读取 JSON 时出现问题 - html - 如何将文本链接到另一个页面
- java - 从java中的不同类调用相同方法的最佳方法
- git - Microsoft Visual Studio 2019 的 Git 扩展不从其他遥控器获取
- python - Selenium 驱动的浏览器显示不同的 HTML 代码
- java - 从不同的调度程序设置和读取 rxJava 链中的实例变量值
- java - 为什么超类中的“this”从子类中调用方法?
- python - Pycharm: ImportError: DLL load failed: 找不到指定的模块