plsql - 对变量 c sys refcursor 的无效引用
问题描述
DECLARE
c SYS_REFCURSOR;
lv_emp emp%ROWTYPE;
BEGIN
OPEN c FOR SELECT employee_id FROM emp;
--fetch c into lv_emp;
DBMS_OUTPUT.put_line (c.emloyee_id);
END;
第 7 行出现错误:ORA-06550:第 7 行,第 24 列:PLS-00487:对变量“C”的无效引用 ORA-06550:第 7 行,第 1 列:语句被忽略
解决方案
如果目标是列出所有employee_id,您可以在REFCURSOR
下面的匿名块中引用。
VARIABLE c REFCURSOR
DECLARE
BEGIN
OPEN :c FOR SELECT empno FROM scott.emp;
END;
/
PRINT c;
匿名块中的 SYS_REFCURSOR
DECLARE
c_cursor SYS_REFCURSOR;
l_row scott.emp%ROWTYPE;
BEGIN
OPEN c_cursor FOR SELECT * FROM scott.emp;
LOOP
FETCH c_cursor INTO l_row;
EXIT WHEN c_cursor%NOTFOUND;
DBMS_OUTPUT.put_line (l_row.empno || ' : ' || l_row.ename);
END LOOP;
CLOSE c_cursor;
END;
/
在过程中使用 SYS_REFCURSOR
程序创建
CREATE OR REPLACE PROCEDURE test_proc_cursor (c OUT SYS_REFCURSOR)
AS
BEGIN
OPEN c FOR SELECT empno FROM scott.emp;
END test_proc_cursor;
/
执行上述程序
DECLARE
cur SYS_REFCURSOR;
p_empno VARCHAR2 (50);
BEGIN
test_proc_cursor (c => cur);
LOOP
FETCH cur INTO p_empno;
EXIT WHEN cur%NOTFOUND;
DBMS_OUTPUT.put_line ('empno -->' || p_empno);
END LOOP;
CLOSE cur;
END;
/
推荐阅读
- javascript - 将模块设置为 ES2017 时出现 tsconfig 错误
- c# - 如何运行通过 SqlCommand 声明语句的 SQL?
- kubernetes - Kubernetes 中服务的完全限定域名 (FQDN) 不起作用?DNS-1035
- java - IDEA 编码文件不正确,我打开的每个文件都损坏了
- algorithm - 使用自定义距离函数对数百万个字符串进行模糊搜索
- node.js - EnvironmentVariableTarget.Process 在进程结束后继续存在
- json - 保留一些 json 键值对,同时使用 jolt 转换它们
- here-api - HERE 路由 API - 获取 403
- java - 使用运行时调用 python 脚本时出现 Java.Error
- sql - 将 Oracle 表中的结果与多个条件相结合