小弟我做了一个程序,现需要调用后台(oracle9i)相关5个存储过程,要了解每一个存储过程执行后返回状态,才能决定是否执行下一个存储过程,由于系统在线使用,就先测试了一下:proc如下:
----------------------------------------------
CREATE OR REPLACE PROCEDURE test_out
/*
  中文名称:测试输出参数
  功    能:测试输出参数
  设 计 人:njxl
  编 码 人:njxl
  修 改 人:njxl
  时    间:2006-01-23
*/
(
 result1 out integer
)
is
begin
  result1:=5;
END;pl/sql测试通过脚本如下:
-----------------------------------------------
set serveroutput on;declare 
  aa integer(1);
begin
  test_out(aa);
  dbms_output.put_line(aa);
end;  通过vb的command对象调用报错
------------------------------------------------
'运行相关proc
Public Function run_proc(ByVal proc_name As String)
Dim oracle9i_con As ADODB.Connection
Dim cmd As ADODB.Command
Dim param As ADODB.Parameter
Dim @result As Integer
Set oracle9i_con = New ADODB.Connection
Set cmd = New ADODB.Commandoracle9i_con.ConnectionString = "Driver=" + CStr(GetIniTF("oracle_icdadmin", "Driver")) + ";" + _
                                "Server=" + CStr(GetIniTF("oracle_icdadmin", "Server")) + ";" + _
                                "Uid=" + CStr(GetIniTF("oracle_icdadmin", "Uid")) + ";" + _
                                "Pwd=" + CStr(GetIniTF("oracle_icdadmin", "Pwd")) + ";"
oracle9i_con.Open  '接上目标数据icdmainSet cmd.ActiveConnection = oracle9i_con
'存储过程名称
    cmd.CommandText = proc_name
'指定要执行的是一个存储过程
    cmd.CommandType = adCmdStoredProc
'指定输出参数对象
    Set param = cmd.CreateParameter("@result", adInteger, adParamOutput)
    cmd.Parameters.Append param
'执行存储过程
    cmd.Execute   
    (这一步报错,说不符合调用规则,或oracle9i连接方式出错,可前面oracle9i_con.Open是正确的)
    msgbox cmd.Parameters("@result")
..........
..........
..........
Set cmd = Nothing
oracle9i_con.Close
Set oracle9i_con = Nothing
End Function解决后立即结贴,多谢大家

解决方案 »

  1.   

    SQL SERVER 的参数用 @,ORACLE 的应该不是,看下帮助
      

  2.   

    参数用不用@,如"outP"效果一样啊!语法正确吗?总说不符合调用规则
      

  3.   

    Try like:Dim rs As New ADODB.Command
        With rs
            .ActiveConnection = oracle9i_con
            .CommandText = "proc_name"
            .Prepared = False
            .CommandType = adCmdStoredProc
            .Parameters.Append .CreateParameter("result1", adNumeric, adParamOutput)
            .Execute
        End With
        msgbox rs.Parameters("result1") '就可得到回调的值
      

  4.   

    .Execute时,一样总说不符合调用规则,还是procCREATE OR REPLACE PROCEDURE test_out
    /*
      中文名称:测试输出参数
      功    能:测试输出参数
      设 计 人:njxl
      编 码 人:njxl
      修 改 人:njxl
      时    间:2006-01-23
    */
    (
     result1 out integer
    )
    is
    begin
      result1:=5;
    END;这个不对啊?