delphi使用ODAC控件查询存储过程返回结果集

使用TOraStoredProc控件执行Oracle存储过程

Oracle存储过程返回单结果集

存储过程

CREATE OR REPLACE PROCEDURE p_test(p_deptno IN varchar2, p_recordset OUT SYS_REFCURSOR) AS
BEGIN
  OPEN p_recordset FOR
    SELECT * FROM Dept WHERE deptno = p_deptno;

END;

代码

  OraStoredProc1.Session := OraSession;
  OraStoredProc1.StoredProcName := 'p_test';
  OraStoredProc1.ParamByName('p_deptno').AsString := '1';
  OraStoredProc1.Open;

备注

1.结果集是只读的,设置LocalUpdate属性后,可以进行修改,但不会提交数据库

Oracle存储过程返回多结果集

存储过程

CREATE OR REPLACE PROCEDURE p_test2(p_deptno     IN varchar2,
                                    p_recordset1 OUT SYS_REFCURSOR,
                                    p_recordset2 OUT SYS_REFCURSOR) AS
BEGIN
  OPEN p_recordset1 FOR
    SELECT * FROM Dept WHERE deptno = p_deptno;
  OPEN p_recordset2 FOR
    SELECT * FROM Users WHERE deptno = p_deptno;
END;

代码

  OraStoredProc1.Session := OraSession;
  OraStoredProc1.StoredProcName := 'p_test';
  OraStoredProc1.ParamByName('p_deptno').AsString := '1';
  OraStoredProc1.Open;  //查询第二个结果集(p_recordset2)
  OraStoredProc1.OpenNext;  //查询第一个结果集(p_recordset1)

备注

1.第一个和第二个结果集都是只读的,设置LocalUpdate属性后,可以进行修改,但不会提交数据库

同时展现多个结果集

代码

  OraStoredProc1.Session := OraSession;
  OraStoredProc1.StoredProcName := 'p_test';
  OraStoredProc1.ParamByName('p_deptno').AsString := '1';
  OraStoredProc1.Open;  //查询第二个结果集(p_recordset2)
  OraQuery1.Cursor := orsp1.ParamByName('p_recordset1').AsCursor;
  OraQuery1.Open; //查询第一个结果集(p_recordset1)

备注

1.OraQuery1中的结果集不是只读的,但修改后不会提交数据库

2.OraStoredProc1.Close前,必须先OraQuery1.Close,否则会报错

原文地址:https://www.cnblogs.com/txgh/p/13944647.html