试图在Oracle PL SQL中创建SELECT存储过程,在变量CURSOR\u OUTPUT REFCURSOR中出错;
我已经为简单的select语句输出创建了一个过程试图在Oracle PL SQL中创建SELECT存储过程,在变量CURSOR\u OUTPUT REFCURSOR中出错;,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我已经为简单的select语句输出创建了一个过程 创建或替换程序marcydashboard(p_记录集输入输出系统\u参考光标) 是 开始 打开p_记录集,从员工中选择员工id、姓名、姓氏; 结束; 变量游标\输出参考游标; 执行marcydashboard(:光标_输出); 我需要与select语句结果相同的结果,但得到的错误如下: ERROR at line 6: PLS-00103: Encountered the symbol "VARIABLE" 4. END
创建或替换程序marcydashboard(p_记录集输入输出系统\u参考光标)
是
开始
打开p_记录集,从员工中选择员工id、姓名、姓氏;
结束;
变量游标\输出参考游标;
执行marcydashboard(:光标_输出);
我需要与select语句结果相同的结果,但得到的错误如下:
ERROR at line 6: PLS-00103: Encountered the symbol "VARIABLE"
4. END;
5. VARIABLE CURSOR_OUTPUT REFCURSOR;
6. EXECUTE marcydashboard(:CURSOR_OUTPUT );
请帮助我修复错误好吧,它在SQL*Plus中工作:
SQL> CREATE OR REPLACE PROCEDURE marcydashboard (p_recordset OUT SYS_REFCURSOR)
2 IS
3 BEGIN
4 OPEN p_recordset FOR
5 SELECT employee_id, first_name, last_name FROM employees;
6 END;
7 /
Procedure created.
SQL>
SQL> VARIABLE cursor_output REFCURSOR;
SQL> EXECUTE marcydashboard(:cursor_output);
PL/SQL procedure successfully completed.
SQL> PRINT :cursor_output
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- ---------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER
SQL>
看起来你不是在使用那个工具,而是在使用其他工具。在这种情况下,它将不起作用,你将不得不以不同的方式来做
SQL> SET SERVEROUTPUT ON
SQL>
SQL> DECLARE
2 l_rc SYS_REFCURSOR;
3 --
4 l_employee_id employees.employee_id%TYPE;
5 l_first_name employees.first_name%TYPE;
6 l_last_name employees.last_name%TYPE;
7 BEGIN
8 marcydashboard (l_rc);
9
10 LOOP
11 FETCH l_rc INTO l_employee_id, l_first_name, l_last_name;
12
13 EXIT WHEN l_rc%NOTFOUND;
14
15 DBMS_OUTPUT.put_line (
16 l_employee_id || ' - ' || l_first_name || ' - ' || l_last_name);
17 END LOOP;
18
19 CLOSE l_rc;
20 END;
21 /
7369 - SMITH - CLERK
7499 - ALLEN - SALESMAN
7521 - WARD - SALESMAN
7566 - JONES - MANAGER
PL/SQL procedure successfully completed.
SQL>
您需要在
结束后的新行上添加/
代码>
END;
/
变量游标\输出参考游标;
我试图(帮助你),但你似乎没有读我写的东西。您使用的工具(它是哪一个?)不支持您尝试使用的代码,变量未知。这就是为什么我发布了另一个选项来获得你想要的。tq我已经正确地检查了它working@sivaprakash您可以单独运行CREATE PROCEDURE
语句(并且只需要运行一次),然后一起运行变量
和执行
语句。