• 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,否则会报错

  • 相关阅读:
    VirtualBox COM对象获取失败
    layui的表单功能
    phpstudy+phpstorm配置xdebug
    wamp2.5怎么设置虚拟域名
    腾讯微博-转播到微博的简单使用
    新浪微博--分享到微博的简单使用
    CKEdiotr使用入门
    GridView删除行
    Python迭代器笔记
    Java基础之打印万年历
  • 原文地址:https://www.cnblogs.com/txgh/p/13944647.html
Copyright © 2020-2023  润新知