Plsql 在Oracle 11g上从vb6执行PL/SQL过程

Plsql 在Oracle 11g上从vb6执行PL/SQL过程,plsql,oracle11g,vb6,Plsql,Oracle11g,Vb6,我试图调用一个PL/SQL过程,该过程具有VisualBasic6函数的输出值,但它不起作用。 这是我的密码 PL/SQL代码(到目前为止,它只是一个模拟): VB6代码: Private Function IsSinistroInABS(NumPol As String, CodGaranzia As String) As Boolean Dim dbConn As New ADODB.Connection With dbConn .Provider = "OraOLEDB.Orac

我试图调用一个PL/SQL过程,该过程具有VisualBasic6函数的输出值,但它不起作用。 这是我的密码

PL/SQL代码(到目前为止,它只是一个模拟):

VB6代码:

Private Function IsSinistroInABS(NumPol As String, CodGaranzia As String) As Boolean
Dim dbConn As New ADODB.Connection

With dbConn
    .Provider = "OraOLEDB.Oracle"
    .Properties("Data Source") = "*********"
    .Properties("User Id") = "ROUTING"
    .Properties("Password") = "***********"
    .Open
End With


Dim dbCmd As ADODB.Command
Dim result As Boolean
Set dbCmd = New ADODB.Command
dbCmd.ActiveConnection = dbConn
dbCmd.CommandTimeout = 300
dbCmd.CommandType = adCmdStoredProc
dbCmd.CommandText = "{CALL ROUTING.IS_SINISTRO_ABS_MOCK(?,?,?)}"

dbCmd.Parameters.Append dbCmd.CreateParameter(, adLongVarChar, adParamInput, _ 
Len(NumPol), NumPol)
dbCmd.Parameters.Append dbCmd.CreateParameter(, adLongVarChar, adParamInput, _ 
Len(CodGaranzia), CodGaranzia)
dbCmd.Parameters.Append dbCmd.CreateParameter(, adBoolean, adParamOutput, , _ 
result)
dbCmd.Prepared = True

dbCmd.Execute

IsSinistroInABS = dbCmd.Parameters("res").value

dbConn.Close

End Function
DB连接工作正常,确实我成功地执行了一个标准SQL查询,但在尝试运行该过程时出现了一个未指定的错误。我还成功地启动了一个没有任何参数的过程。因此,问题应该出在它们的使用上

请注意,该过程是一个独立的过程。换句话说,它不包含在任何包中

也许我有点晚了(你在2.5年前发布了你的问题),但我也遇到了同样的问题。
经过大量的挖掘和挫折之后,我发现当存储过程有数字输出参数(VARCHAR和任何输入参数都可以)时会发生错误


我终于发现,当您使用古老的DB provider
MSDAORA.1

时,一切都正常运行。也许您会发现此链接非常有用:当您单步执行ISSInstroInbs时,错误发生在哪一行?我不知道。错误消息只是警告我发生了一个未指定的错误。@NabuchDonossor谢谢,但我的问题99%是由使用参数引起的,因为我成功地启动了一个没有任何参数的过程。@danieledc:如果你仔细看另一个问题,他会使用命名参数。
Private Function IsSinistroInABS(NumPol As String, CodGaranzia As String) As Boolean
Dim dbConn As New ADODB.Connection

With dbConn
    .Provider = "OraOLEDB.Oracle"
    .Properties("Data Source") = "*********"
    .Properties("User Id") = "ROUTING"
    .Properties("Password") = "***********"
    .Open
End With


Dim dbCmd As ADODB.Command
Dim result As Boolean
Set dbCmd = New ADODB.Command
dbCmd.ActiveConnection = dbConn
dbCmd.CommandTimeout = 300
dbCmd.CommandType = adCmdStoredProc
dbCmd.CommandText = "{CALL ROUTING.IS_SINISTRO_ABS_MOCK(?,?,?)}"

dbCmd.Parameters.Append dbCmd.CreateParameter(, adLongVarChar, adParamInput, _ 
Len(NumPol), NumPol)
dbCmd.Parameters.Append dbCmd.CreateParameter(, adLongVarChar, adParamInput, _ 
Len(CodGaranzia), CodGaranzia)
dbCmd.Parameters.Append dbCmd.CreateParameter(, adBoolean, adParamOutput, , _ 
result)
dbCmd.Prepared = True

dbCmd.Execute

IsSinistroInABS = dbCmd.Parameters("res").value

dbConn.Close

End Function