使用IN参数调用Oracle存储过程时出现运行时错误3151
问题描述:
我试图在MS Access中调用Oracle过程。过程是有IN参数,我无法调用它,每当我收到“ODBC调用失败”错误。在没有任何IN或OUT参数的情况下运行Oracle过程时,该过程正在成功调用并执行期望的结果。我只想知道如何在Access for Oracle过程中调用参数。使用IN参数调用Oracle存储过程时出现运行时错误3151
在下面的代码中,我有一个Oracle过程trt
和P_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