请教各位一个访问oracle存储过程的问题,我现在有一个存储过程,其中有一个输入值和一个返回值,一直有问题,请大家给个例子或作一些指点(老实报至少一个参数没有被指定值。)
 Set conn = getConn()
    Set cmd.ActiveConnection = conn
    cmd.CommandType = adCmdStoredProc
   cmd.CommandText = "{call proc_id_create(?,?)}"
            cmd.Parameters.Append cmd.CreateParameter("the_name", adVarChar, adParamInput, 50, IDString)
   
    cmd.Parameters.Append cmd.CreateParameter("T_RETURN", adNumeric, adParamInputOutput, 40, temLong)   
    cmd.Execute

解决方案 »

  1.   

    示例:Public Sub Main()
        On Error GoTo ErrorHandler   Dim Cnxn As ADODB.Connection
        Dim cmdByRoyalty As ADODB.Command
        Dim prmByRoyalty As ADODB.Parameter
        Dim rstByRoyalty As ADODB.Recordset
        Dim rstAuthors As ADODB.Recordset
        Dim strCnxn As String
        Dim strSQLAuthors As String
        Dim strSQLByRoyalty As String
         'record variables
        Dim intRoyalty As Integer
        Dim strAuthorID As String
        
        Set Cnxn = New ADODB.Connection
        strCnxn = "Provider='sqloledb';Data Source='MySqlServer';" & _
            "Initial Catalog='Pubs';Integrated Security='SSPI';"
        Cnxn.Open strCnxn
           
        Set cmdByRoyalty = New ADODB.Command
        cmdByRoyalty.CommandText = "byroyalty"'存储过程名
        cmdByRoyalty.CommandType = adCmdStoredProc
       
        '获取参数值且添加参数
        intRoyalty = Trim(InputBox("Enter royalty:"))
        Set prmByRoyalty = cmdByRoyalty.CreateParameter("percentage", adInteger, adParamInput)
        cmdByRoyalty.Parameters.Append prmByRoyalty
        prmByRoyalty.Value = intRoyalty
        
        '执行命今
        Set cmdByRoyalty.ActiveConnection = Cnxn
        Set rstByRoyalty = cmdByRoyalty.Execute
        
        Set rstAuthors = New ADODB.Recordset
        strSQLAuthors = "Authors"
        rstAuthors.Open strSQLAuthors, Cnxn, adUseClient, adLockOptimistic, adCmdTable
        
        Debug.Print "Authors with " & intRoyalty & " percent royalty"
        
        Do Until rstByRoyalty.EOF
            strAuthorID = rstByRoyalty!au_id
            Debug.Print "   " & rstByRoyalty!au_id & ", ";
            rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
            Debug.Print rstAuthors!au_fname & " " & rstAuthors!au_lname
            rstByRoyalty.MoveNext
        Loop    rstByRoyalty.Close
        rstAuthors.Close
        Cnxn.Close
        Set rstByRoyalty = Nothing
        Set rstAuthors = Nothing
        Set Cnxn = Nothing
        Exit Sub
        
    ErrorHandler:
        If Not rstByRoyalty Is Nothing Then
            If rstByRoyalty.State = adStateOpen Then rstByRoyalty.Close
        End If
        Set rstByRoyalty = Nothing
        
        If Not rstAuthors Is Nothing Then
            If rstAuthors.State = adStateOpen Then rstAuthors.Close
        End If
        Set rstAuthors = Nothing
        
        If Not Cnxn Is Nothing Then
            If Cnxn.State = adStateOpen Then Cnxn.Close
        End If
        Set Cnxn = Nothing
        
        If Err <> 0 Then
            MsgBox Err.Source & "-->" & Err.Description, , "Error"
        End If
    End Sub
      

  2.   

    兄弟,你这是sqlserver的,我需要oracle的,两者有不同