我有一张桌子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子句中使用它.