使用IN参数调用Oracle存储过程时出现运行时错误3151

问题描述:

我试图在MS Access中调用Oracle过程。过程是有IN参数,我无法调用它,每当我收到“ODBC调用失败”错误。在没有任何IN或OUT参数的情况下运行Oracle过程时,该过程正在成功调用并执行期望的结果。我只想知道如何在Access for Oracle过程中调用参数。使用IN参数调用Oracle存储过程时出现运行时错误3151

在下面的代码中,我有一个Oracle过程trtP_FILENAME是IN参数,我希望IN参数P_FILENAME将由用户给出。在这trt程序我试图通过utl_file函数导入文件,并且它正在工作正常,而我在Access中调用它时运行SQL Developer时我无法这样做。

On Error GoTo trap 


Dim db As Database 
    Dim LSProc As QueryDef 
    Dim LSQL As String 

    Set db = CurrentDb() 

    Set LSProc = db.CreateQueryDef("") 

    'SQL to call stored procedure (with parameters) 
    LSQL = "BEGIN trt ('" & P_FILENAME & "')" 
    'LSQL = "Begin TRT ('BUSMAY2014.csv')" 
    LSQL = LSQL & "; END;" 


    'Use {Microsoft ODBC for Oracle} ODBC connection 
    LSProc.Connect = "ODBC;DSN=ODM_UNCT;UID=ODM_UNCTLD;PWD=****;SERVER=******" 
    LSProc.SQL = LSQL 
    LSProc.ReturnsRecords = False 
    LSProc.ODBCTimeout = 0 

    LSProc.Execute 
    'DoCmd.RunSQL ("EXEC trt " & P_FILENAME) 
CallSProc = True 
Exit Sub 
trap: 
     Dim MyError As Error 
     MsgBox Errors.Count 
     For Each MyError In DBEngine.Errors 
     With MyError 
      MsgBox .Number & " " & .Description 
     End With 
     Next MyError 

End Sub 

MS ACCESS是前端,Oracle是后端。 TRT是过程名称 P_FILENAME在过程中的参数

下面的代码对我的作品:

Dim db As DAO.Database, LSProc As DAO.QueryDef 
Set db = CurrentDb 
Set LSProc = db.CreateQueryDef("") 
LSProc.Connect = "ODBC;DSN=ODM_UNCT;UID=GORD;PWD=whatever;" 
LSProc.SQL = "BEGIN TRT('HelloFromAccess'); END;" 
LSProc.ReturnsRecords = False 
LSProc.Execute dbFailOnError 
Set LSProc = Nothing 
Set db = Nothing