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