我有一個簡單的Oracle過程,如下所示。我正在嘗試使用VB6調用該過程並從過程中提取輸出。使用VB6調用Oracle 11g存儲過程
CREATE OR REPLACE PROCEDURE EXTRACTTXN (reportdate IN DATE, p_recordset OUT SYS_REFCURSOR) AS
BEGIN
OPEN p_recordset FOR
SELECT
TXN_ID,
TXN_ACTION,
TXN_STATUS,
TXN_DATE,
TXN_AMOUNT
FROM TRANSACTIONS
WHERE
TRUNC(TXN_DATE) = TRUNC(reportdate)
END EXTRACTTXN;
VB代碼是這樣的;
Sub FetchTransactions(ByVal ReportDate As Date, cnnMine as ADODB.Connection)
On Error GoTo TrapErr
Dim cmdMine As ADODB.Command, rsMine As ADODB.Recordset
cmdMine.ActiveConnection = cnnMine
cmdMine.CommandTimeout = 300
cmdMine.CommandType = adCmdStoredProc
cmdMine.CommandText = "EXTRACTTXN"
cmdMine.Parameters.Append cmdMine.CreateParameter("reportdate", adDate, adParamInput, , Format(ReportDate, "DD-MMM-YYYY"))
cmdMine.Parameters.Append cmdMine.CreateParameter("p_recordset", adVariant, adParamOutput)
Set rsMine = cmdMine.Execute
Do While rsMine.EOF
Debug.Print rsMine!TXN_ID, rsMine!TXN_ACTION, rsMine!TXN_STATUS, rsMine!TXN_DATE, rsMine!TXN_AMOUNT
rsMine.MoveNext
Loop
rsMine.Close
Exit Sub
TrapErr:
MsgBox Err.Number & " - " & Err.Description, vbExclamation, App.ProductName
End Sub
運行代碼時,我收到以下錯誤:
ORA-06550:第1行,第7列: PLS-00306:在調用 'EXTRACTTXN' 錯號碼或類型的參數ORA-06550:第1行第7列: PL/SQL:語句被忽略
我的代碼有什麼問題嗎?感謝幫助。 Niz
@Bob ...謝謝你捲土重來。您對Oracle行爲的評論非常正確。 我試圖讓問題變得更簡單。我刪除了輸入參數(ReportDate),但保留了輸出參數(p_recordset)。還要刪除Oracle SP上的WHERE子句。通過使用類似的VB代碼,我嘗試了提取,現在VB發現了一個沒有錯誤編號或描述的錯誤。但是在記錄集上沒有任何數據。我的簡單需求是使用VB6從Oracle中提取數據。任何幫助將非常感激。一直在苦苦掙扎。 – Niz 2014-10-22 14:53:48
好的。要使用VB6從Oracle中提取數據,請使用簡單的「SELECT * FROM SomeTable」作爲SQL命令。您需要一個ADO連接對象和一個ADO記錄集對象。您還需要知道Oracle連接的正確connectionstring值。在www.connectionstrings.com上查看與Oracle的OLE DB連接。設置您的連接對象並將其打開。然後打開記錄集對象,傳遞第一個參數的sql服務器字符串,並將連接對象作爲第二個參數傳遞。你應該得到一個包含你的數據的記錄集。 – BobRodes 2014-10-22 15:54:20
請記住,這不是(重複)生產方式。存儲過程是。但一次添加一個複雜程度。首先,請正確地建立連接,並能夠通過它選擇數據。然後開始研究如何訪問存儲過程。 – BobRodes 2014-10-22 15:55:18