这是以前我在大富翁回答别人的: 例如查询scott下面的emp 1.建包,定义游标类型和过程 create or replace Package pkg_demo AS TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE; procedure open_emp_cv(emp_cv OUT EmpCurTyp); END pkg_demo; 2。定义包体 create or replace package body pkg_demo AS procedure open_emp_cv (emp_cv OUT EmpCurTyp) IS BEGIN OPEN emp_cv FOR SELECT * FROM emp; END open_emp_cv; end pkg_demo; 3。建立ado连接,注意用oracle的provider,连接字符串里包含“PLSQLRSet=1” ADOConnection1.ConnectionString:='PLSQLRSet=1;Provider=OraOLEDB.Oracle;Password=tiger;Persist Security Info=True;User ID=scott;Data Source=fjddmis;Extended Properties=""'; ADOConnection1.Open; 4。用TADODataset调用存储过程,注意调用格式 ADODataSet1.Connection:=ADOConnection1; ADODataSet1.CommandText:='{call pkg_demo.open_emp_cv}'; ADODataSet1.CommandType:=cmdText; ADODataSet1.Open;
例如查询scott下面的emp
1.建包,定义游标类型和过程
create or replace Package pkg_demo
AS
TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
procedure open_emp_cv(emp_cv OUT EmpCurTyp);
END pkg_demo;
2。定义包体
create or replace package body pkg_demo
AS
procedure open_emp_cv (emp_cv OUT EmpCurTyp)
IS
BEGIN
OPEN emp_cv FOR SELECT * FROM emp;
END open_emp_cv;
end pkg_demo;
3。建立ado连接,注意用oracle的provider,连接字符串里包含“PLSQLRSet=1”
ADOConnection1.ConnectionString:='PLSQLRSet=1;Provider=OraOLEDB.Oracle;Password=tiger;Persist Security Info=True;User ID=scott;Data Source=fjddmis;Extended Properties=""';
ADOConnection1.Open;
4。用TADODataset调用存储过程,注意调用格式
ADODataSet1.Connection:=ADOConnection1;
ADODataSet1.CommandText:='{call pkg_demo.open_emp_cv}';
ADODataSet1.CommandType:=cmdText;
ADODataSet1.Open;
----------------------------
谢谢,我以解决问题,顺便再问一个问题,为什么返回的数据集不能在DBGRID中编辑。
---------------------------------
为什么?是和效率有关吗?谢谢!
关键问题是为了保证数据完整性,需要控制数据敏感控件做post,还不如不用数据敏感控件