我的oracle存储过程有4个输入参数:年/起始月/结束月/编号,该存储过程执行后,往一个临时表里插入数据。在oracle环境下测试了很多天了,运行都很正常。在delphi的form里放置三个下拉框和一个文本框,分别用于输入年/起始月/结束月/编号。
放一个Tadoconnection,其Connectionstring设置后与oracle连接正常。
放一个TAdoStoreproc,其connection设置为adoconnection的name,从ProcedureName下拉框里选择一个经过调试的存储过程,点击Parameters旁边的...可以看见存储过程的四个参数。可是在delphi程序的button事件过程执行下面代码时,
    ......
    ND:=COMBOBOX1.TEXT;
    QS:=COMBOBOX2.TEXT;
    JS:=COMBOBOX3.TEXT;
    BH:=EDIT1.TEXT;
    with proc_name do
    begin
        Close;
        Parameters.Clear;
        Parameters.Refresh;
        ProcedureName:='MY_ORA_PROC';        Parameters.CreateParameter('NIAN', ftstring,pdInput, 4,ND);
        Parameters.CreateParameter('QISHIYUE', ftstring, pdInput,2,QS);
        Parameters.CreateParameter('JIESHUYUE', ftstring, pdInput,2,JS);
        Parameters.CreateParameter('BIAOHAO',ftstring, pdInput,4,BH);        parameters.ParamValues['NIAN']:=ND;
        parameters.ParamValues['QISHIYUE']:=QS;
        parameters.ParamValues['JIESHUYUE']:=JS;
        parameters.ParamValues['BIANHAO']:=BH;
        Prepared := True;
        ExecProc;
    end
    ......
当执行到ExecProc;时,提示下面错误:
[Microsoft][ODBC driver for Oracle][Oracle]ORA-06550:行1、列7:
PLS-00306:调用'MY_ORA_PROC'时自变量数量或类型错误
ORA-06550:行1、列7:
PL/SQL:Statement ignored.另外,我在delphi的属性框里试图将存储过程的active设置为true时,也提示书面错误.请问是什么原因?怎么解决?

解决方案 »

  1.   

    突然想到一个问题:
    oracle存储过程的4个参数军事varchar2型的,而在delphi里,通过三个下拉框和一个文本框得到的如下变量,
        ND:=COMBOBOX1.TEXT;
        QS:=COMBOBOX2.TEXT;
        JS:=COMBOBOX3.TEXT;
        BH:=EDIT1.TEXT;
    他们传到oracle的存储过程,会不会是数据类型部队,怎么修改?请帮帮忙
      

  2.   

    突然想到一个问题:
    oracle存储过程的4个参数全是varchar2型的,而在delphi里,通过三个下拉框和一个文本框得到的如下变量,
        ND:=COMBOBOX1.TEXT;
        QS:=COMBOBOX2.TEXT;
        JS:=COMBOBOX3.TEXT;
        BH:=EDIT1.TEXT;
    他们传到oracle的存储过程,会不会是数据类型不对,怎么修改?请帮帮忙