Oracle Sql:如何从过程输出表

4 sql oracle stored-procedures

我有一张桌子A(a1,a2,a3);

我想写一个这样的程序:

CREATE OR REPLACE PROCEDURE B
AS
BEGIN
.........
..........
SELECT * FROM A;
END
Run Code Online (Sandbox Code Playgroud)

所以,当我这样做 EXECUTE B;

它应该输出表A.

就像发生在 select * from A;

看到我尝试了其他答案,但它不适合我,这就是我发布这个问题的原因

Jus*_*ave 5

SQL Server(我相信你表示你来自另一个问题)与Oracle不同.您不能只有一个执行查询的过程.

您可以将过程定义为具有OUT类型的参数SYS_REFCURSOR.

CREATE OR REPLACE PROCEDURE b( p_rc OUT SYS_REFCURSOR )
AS
BEGIN
  OPEN p_rc 
   FOR SELECT *
         FROM a;
END;
Run Code Online (Sandbox Code Playgroud)

然后,您的过程的调用者需要知道如何从该引用游标获取并对结果执行有意义的操作.如果您使用的是SQL*Plus

SQL> variable rc refcursor;
SQL> exec b( :rc );
SQL> print rc
Run Code Online (Sandbox Code Playgroud)

如果您使用的不是SQL*Plus,代码可能会有所不同.

或者,您的过程可以返回PL/SQL集合.或者它可以是流水线表函数而不是过程,在这种情况下,您可以在FROM查询的子句中使用它.