在Oracle存储过程中运行查询

Sao*_*obi 0 sql oracle plsql

我有一个问题

select * from myTable
Run Code Online (Sandbox Code Playgroud)

...我希望将此查询包装在存储过程中,并让存储过程输出此查询的结果.

我该怎么做?

在ms-sql中,我可以将查询作为字符串存储到字符串变量中.然后执行"执行(变量)".为什么Oracle中没有这样的东西?

OMG*_*ies 5

使用:

CREATE OR REPLACE PROCEDURE MY_SPROC() RETURN SYS_REFCURSOR

L_CURSOR SYS_REFCURSOR;

BEGIN

  OPEN L_CURSOR FOR 
    SELECT * from MYTABLE;

  RETURN L_CURSOR;

END;
Run Code Online (Sandbox Code Playgroud)

如果要在Oracle上运行动态SQL,请使用此选项:

CREATE OR REPLACE PROCEDURE MY_SPROC() RETURN SYS_REFCURSOR

L_CURSOR SYS_REFCURSOR;
L_QUERY  VARCHAR2(5000) DEFAULT 'SELECT ...';

BEGIN

  OPEN L_CURSOR FOR L_QUERY;
  RETURN L_CURSOR;

END;
Run Code Online (Sandbox Code Playgroud)

如果要在动态SQL中包含绑定变量:

CREATE OR REPLACE PROCEDURE MY_SPROC() RETURN SYS_REFCURSOR

L_CURSOR SYS_REFCURSOR;
L_QUERY  VARCHAR2(5000) DEFAULT 'SELECT ...';

BEGIN

  OPEN L_CURSOR FOR L_QUERY
   USING bind_var1;
  RETURN L_CURSOR;

END;
Run Code Online (Sandbox Code Playgroud)