我正在使用Oracle XE的HR数据库学习PL/SQL。如何在匿名PL/SQL块中使用out游标参数执行oracle过程?
我创建了以下存储过程:
CREATE OR REPLACE PROCEDURE get_employees(p_country_id IN CHAR
, p_emp OUT SYS_REFCURSOR)
IS
BEGIN
OPEN p_emp FOR
SELECT e.first_name
,e.last_name
,e.department_id
,d.department_name
,l.city
,l.state_province
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id
INNER JOIN locations l
ON d.location_id = l.location_id
WHERE l.country_id = p_country_id;
END;
我知道如何在SQL开发GUI界面执行它,并查看结果。我也从Justin Cave处了解到here和here如何执行它并查看结果SQL * Plus的风格像这样:
VARIABLE CE REFCURSOR;
EXEC GET_EMPLOYEES('US', :CE);
PRINT CE;
我想在一个匿名PL/SQL块执行存储过程和看在网格中的结果,但它并没有成功。
像什么贾斯汀洞的建议,下面执行得很好,但结果不显示:
DECLARE
C_EMP SYS_REFCURSOR;
BEGIN
GET_EMPLOYEES('US', C_EMP);
END;
下会失败:
DECLARE
C_EMP SYS_REFCURSOR;
L_REC C_EMP%ROWTYPE; --THIS LINE FAILS.
BEGIN
GET_EMPLOYEES('US', C_EMP);
-- LOOP AND FETCH GOES HERE.
END;
错误消息说:
PLS-00320:此表达式类型的声明是 不完整或格式不正确
我不明白。我一直在其他一些匿名的PL/SQL块中这样做,并且它工作得很好。这条线有什么问题?无法弄清楚。
引用游标与普通游标不相同;你在其他方块中做了什么 - 使用普通光标的rowtpe? [你不能这样做](http://stackoverflow.com/q/11187376/266304),但我不知道如何做到这一点无论如何会帮助你。我不完全确定你的问题是什么 - 为什么你会得到这个错误,或者你在寻找如何在网格视图中获取引用光标?或者是其他东西? –
[This answer](http://stackoverflow.com/a/27006514/266304)还显示了一种通过代码编辑器对话框在网格中获取结果的方法。这可能是这些问题之一的重复,但不确定哪一个。 –
@AlexPoole:我想我已经明确了我一直在试图做的事情:'我想在一个匿名的PL/SQL块中执行存储过程,并在网格中查看结果,但它并未成功。' – Stack0verflow