【发布时间】:2020-04-08 18:10:56
【问题描述】:
我正在尝试在 oracle 中编写一个存储过程,它采用 IN 参数并将其用作 SELECT 查询的一部分。我想返回一个结果集,就像我只是简单地运行 SELECT * FROM table where id = 1; 但是我似乎找不到任何方法来做到这一点?
我查看了 sys_refcursor、dbms_sql.return_result 和其他一些,但这些要么只编译,要么编译并将输出返回到控制台,而不是作为查询结果集。
以下过程的简单示例
CREATE OR REPLACE PROCEDURE myProc
(
v_id IN table.id%TYPE;
)
AS
BEGIN
--desired query
SELECT * FROM table WHERE id = v_id;
--sys_refcursor which only prints to console
open c1 for
select * from table where id=v_id;
dbms_sql.return_result(c1);
--execute immediate does not return any results set
execute immediate 'SELECT * FROM table WHERE id = v_id';
END;
对于如何实现这一点,还有其他建议或想法吗? 注意:我不希望处理结果,这就是我不使用 INTO 子句的原因,即使我确实使用了它也不会返回结果集。
【问题讨论】:
-
如果您不想处理结果,那您为什么还要执行 SQL 呢?您希望您的程序返回结果吗?你的程序是从哪里调用的?
-
这能回答你的问题吗? Get resultset from oracle stored procedure
-
@gsalem 是的,我希望程序返回结果。我正在将程序从 sybase 迁移到 oracle。我相信由此产生的结果集作为 dbservice 的一部分包含在 java 对象中
-
@Serg 感谢我之前没有看到的链接。看起来那里的解决方案似乎专注于 sql plus/functions/dbms_output。不幸的是,这两种方法都不适合我的具体情况
标签: sql oracle stored-procedures plsql oracle-sqldeveloper