我在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
则没问题、怎么解决??????
小弟先谢了!!!!

解决方案 »

  1.   

    想返回”My_PACKAGE.My_Cursor”類型?Delphi支持嗎?
    且此”Cursor”返回有何用?俺没用過。君調整一下ParamType定義試試... 
      

  2.   

    这应该是返回1个cursor给客户端吧。
    例如服务器端可以
    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;
      

  3.   

    在Oracle服务器端可以Open Cursor ...
    但是返回到Delphi、能象SQL文一様使用?
    調査中...