#DBMS_SQL

DBMS_SQL包提供了一组内置接口,用于执行动态SQL,包括DDL和DML。

# RETURN_RESULT

DBMS_SQL.RETURN_RESULT (
rc              IN OUT SYS_REFCURSOR,
to_client       IN BOOLEAN DEFAULT TRUE);

RETURN_RESULT为存储过程,用于执行指定SQL并返回结果集给客户端(例如接口程序),客户端获得结果集游标后,可以执行fetch语句查询结果。

当在yasql中执行本存储过程时,将直接输出结果集内容。

参数 用途
rc 动态游标
to_client 是否返回结果集给客户端;默认为true,如果传入false并且是执行动态SQL时,结果集不返回给客户端。

Note

  • 当前只有查询结果集可以返回。
  • 执行返回结果集后,rc参数对应的游标不能再访问。
  • 客户端将缓存结果集全部结果,但依赖客户端机的内存大小。
  • 过程体执行过程中如果发生错误,错误点之前返回的结果集,客户端依然可以获取到。

示例

CREATE OR REPLACE PROCEDURE return_rs_proc IS
cur1 SYS_REFCURSOR;
cur2 sys_refcursor;
BEGIN
  OPEN cur1 FOR SELECT area_no,area_name FROM area WHERE area_no='01';
  DBMS_SQL.RETURN_RESULT(cur1,false);
  OPEN cur2 FOR SELECT branch_no,branch_name FROM branches WHERE area_no='01';
  DBMS_SQL.RETURN_RESULT(cur2);
END;
/

--执行静态SQL
exec return_rs_proc;

ResultSet #1

AREA_NO AREA_NAME                                                     
------- ------------------------------------------------------------- 
01      华东                                                       


ResultSet #2

BRANCH_NO BRANCH_NAME                                                      
--------- ---------------------------------------------------------------- 
0101      上海                                                          
0102      南京                                                          
0103      福州                                                          
0104      厦门                                                          



--执行动态SQL,此时由于to_client为false,第一个结果集不会返回
BEGIN
  EXECUTE IMMEDIATE 'begin return_rs_proc; end;';
END;
/

ResultSet #1

BRANCH_NO BRANCH_NAME                                                      
--------- ---------------------------------------------------------------- 
0101      上海                                                          
0102      南京                                                          
0103      福州                                                          
0104      厦门                                                          

pdf-btn 下载文档
copy-btn 复制链接