#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 厦门