我有一张桌子A(a1,a2,a3);
我想写一个这样的程序:
CREATE OR REPLACE PROCEDURE B AS BEGIN ......... .......... SELECT * FROM A; END
这样当我做EXECUTE B时;
它应该输出表A.
如在select * from A中所发生的那样;
看到我尝试了其他答案,但它不适合我,这就是我发布这个问题的原因
解决方法
sql Server(我相信你表示你来自另一个问题)与Oracle不同.您不能只有一个执行查询的过程.
您可以将过程定义为具有SYS_REFCURSOR类型的OUT参数.
CREATE OR REPLACE PROCEDURE b( p_rc OUT SYS_REFCURSOR ) AS BEGIN OPEN p_rc FOR SELECT * FROM a; END;
然后,您的过程的调用者需要知道如何从该引用游标获取并对结果执行有意义的操作.如果您使用的是sql * Plus
sql> variable rc refcursor; sql> exec b( :rc ); sql> print rc
或者,您的过程可以返回PL / sql集合.或者它可以是流水线表函数而不是过程,在这种情况下,您可以在查询的FROM子句中使用它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。