这听起来像一个简单直接的问题,但我无法弄清楚。经过几个小时的网上搜索,我比起初更迷失。
我只是想编写一些代码来从我的程序中生成结果集。
这是程序的开始:
CREATE OR REPLACE PROCEDURE TEST_PROC
(
Cursor OUT SYS_REFCURSOR,
SDate IN DATE,
EDate IN DATE,
Department IN VARCHAR2,
Users IN CLOB
)
IS
-- ...
然后它继续从两个不同的表中选择字段,将它们连接在一起,应用一些过滤,就是这样。
如果要从表中返回结果集,可以编写如下内容:
SELECT * FROM TABLE;
我想做一些像这样简单易行的事情,但是从存储过程中获取数据。我知道当我调用该程序时,我必须提供参数。
我在TOAD中使用SQL。有人可以提供帮助吗?
答案 0 :(得分:1)
示例程序
CREATE OR REPLACE PROCEDURE TEST_PROC (P1 OUT SYS_REFCURSOR)
AS
BEGIN
OPEN P1 FOR SELECT * FROM user_tables;
END;
在Toad执行时告诉它在设置参数窗口中输出OUT参数的值,如屏幕截图所示。这是从Toad 12.7中获取的,所以你的对话框可能看起来不一样,但是这个选项已存在多年,你应该把它放在那里。
答案 1 :(得分:1)
CREATE OR REPLACE FUNCTION rs_func RETURN SYS_REFCURSOR IS
l_result SYS_REFCURSOR;
BEGIN
OPEN l_result FOR SELECT DUMMY FROM DUAL;
RETURN l_result;
END;
/
SELECT rs_func FROM DUAL;
您还可以将参数应用于函数,并从任何表或连接的表组合中进行选择。使用上面的模板将执行查询作为函数的定义者。如果要将查询作为函数的调用者执行,则在函数规范中指定AUTHID CURRENT_USER。存储过程以类似的方式工作,但是根据您使用该过程的目标环境,存在一些使用复杂性。
您的问题请求能力 从表中选择* 但利用存储过程。您不能从仅SQL查询函数执行存储过程。有能力执行: select * from table(stored_func(...)); 这利用了“Pipelined”函数,并且需要创建对象类型来定义函数的返回结构而不是结果集。