我在oracle服务器创建了一个存储过程MY_TEST
CREATE OR REPLACE PACKAGE MY_PACKAGE AS
TYPE My_Cursor IS REF CURSOR;
PROCEDURE MY_TEST (
v_Type in int ,
v_param1 in int ,
v_ResultFlag out int,
Result_Data OUT MY_PACKAGE.My_Cursor);
End MY_PACKAGE;CREATE OR REPLACE PROCEDURE MY_TEST (
v_Type in int ,
v_param1 in int ,
v_ResultFlag out int,
Result_Data OUT My_PACKAGE.My_Cursor)
as
begin
v_ResultFlag := 100 ;
end MY_TEST;然后客户端用ADOStoreProc调用。
ADOStoredProc1.Parameters.ParamByName('v_type').value:=1;
ADOStoredProc1.Parameters.ParamByName('v_param1').value:=1;
ADOStoredProc1.Parameters.ParamByName('v_ResultFlag').value:=1;
ADOStoredProc1.ExecProc;
returnValue:=ADOStoredProc.Parameters.ParamByName('v_ResultFlag').value;如果在存储过程中定义了
Result_Data OUT My_PACKAGE.My_Cursor
则delphi在运行到ExecProc时提示错误:
‘ORA-06550:line1,column 7:
PLS-00306:wrong number or types of argument in call to 'MÝ_TEST'
....如果没 在存储过程中定义
Result_Data OUT My_PACKAGE.My_Cursor
则没问题、怎么解决??????
小弟先谢了!!!!
CREATE OR REPLACE PACKAGE MY_PACKAGE AS
TYPE My_Cursor IS REF CURSOR;
PROCEDURE MY_TEST (
v_Type in int ,
v_param1 in int ,
v_ResultFlag out int,
Result_Data OUT MY_PACKAGE.My_Cursor);
End MY_PACKAGE;CREATE OR REPLACE PROCEDURE MY_TEST (
v_Type in int ,
v_param1 in int ,
v_ResultFlag out int,
Result_Data OUT My_PACKAGE.My_Cursor)
as
begin
v_ResultFlag := 100 ;
end MY_TEST;然后客户端用ADOStoreProc调用。
ADOStoredProc1.Parameters.ParamByName('v_type').value:=1;
ADOStoredProc1.Parameters.ParamByName('v_param1').value:=1;
ADOStoredProc1.Parameters.ParamByName('v_ResultFlag').value:=1;
ADOStoredProc1.ExecProc;
returnValue:=ADOStoredProc.Parameters.ParamByName('v_ResultFlag').value;如果在存储过程中定义了
Result_Data OUT My_PACKAGE.My_Cursor
则delphi在运行到ExecProc时提示错误:
‘ORA-06550:line1,column 7:
PLS-00306:wrong number or types of argument in call to 'MÝ_TEST'
....如果没 在存储过程中定义
Result_Data OUT My_PACKAGE.My_Cursor
则没问题、怎么解决??????
小弟先谢了!!!!
且此”Cursor”返回有何用?俺没用過。君調整一下ParamType定義試試...
例如服务器端可以
open Result_Data for
select A from table1 where B=v_param1;
这样客户端可以直接如下操作,
ADOStoredProc1.Open;
while not ADOStoredProc1.Eof do
begin
combobox1.Items.Add(ADOStoredProc1.Fields[0].AsString);
ADOStoredProc1.Next;
end;
但是返回到Delphi、能象SQL文一様使用?
調査中...