例如:SQL SERVER :
DataModule1.ClientDataSet_global.CommandText :='TJADD_pzsc_01 '+''''+DATES+''''+','+''''+ trim(frmlogin.ComboBoxCZY.TEXT) +''''+ ','+''''+trim(ComboBox1.TEXT) +''''返回的是游标可连接到DataModule1.ClientDataSet_global所连接的控件中!ORACLE例子: CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
END pkg_test;
/
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
IS
sqlstr VARCHAR2 (500);
BEGIN
IF p_id = 0 THEN
OPEN p_rc FOR
SELECT ID, NAME, sex, address, postcode, birthday
FROM student;
ELSE
sqlstr :=
'select id,name,sex,address,postcode,birthday
from student where id=:w_id';
OPEN p_rc FOR sqlstr USING p_id;
END IF;
END get;
END pkg_test;
应如何调用!!!!!
DataModule1.ClientDataSet_global.CommandText :='TJADD_pzsc_01 '+''''+DATES+''''+','+''''+ trim(frmlogin.ComboBoxCZY.TEXT) +''''+ ','+''''+trim(ComboBox1.TEXT) +''''返回的是游标可连接到DataModule1.ClientDataSet_global所连接的控件中!ORACLE例子: CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
END pkg_test;
/
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
IS
sqlstr VARCHAR2 (500);
BEGIN
IF p_id = 0 THEN
OPEN p_rc FOR
SELECT ID, NAME, sex, address, postcode, birthday
FROM student;
ELSE
sqlstr :=
'select id,name,sex,address,postcode,birthday
from student where id=:w_id';
OPEN p_rc FOR sqlstr USING p_id;
END IF;
END get;
END pkg_test;
应如何调用!!!!!
分不够可增加地》》》》》》》》》》》》》》》》
给你个例子吧
在中间层定义函数
function CallStoreProc({你需要的参数列表}iPid : integer; var PRc : myrctype);integer;
var
daspTemp : TStoredProc;
begin
daspTemp := TStoredProc.Create(nil);
with daspTemp do
try
DatabaseName := UserDBX.DataBaseName;
StoredProcName := 'Oracle对象实例.pkg_test';
Params.CreateParam(ftInteger, 'p_id', ptInput);
Params.CreateParam(ftInteger{(或其他你要的类型如ftString,ftFloat等)}, 'p_rc', ptOutput);
//如果有返回值的还要加上Params.CreateParam(ftInteger{或其他类型}, 'result', ptResult);
//下面是参数赋值
ParamByName('p_id').asInteger := iPid;
ExecProc;
PRc := ParamByName('p_rc').AsInteger(或其他类型);
Result := ParamByName('result').asInteger;
finally
Close;
Free;
end;
ClientDataSet.commandtext:='........';
将游标结果直接返回ClientDataSet中!!!
将游标结果直接返回ClientDataSet中!!!
没有象这种样式的方法调用ORACLE的过程吗?????