Вызов Oracle процедуры через ADO - VB

Узнай цену своей работы

Формулировка задачи:

Добрый день!
Возникла такая проблема:
Необходимо вызвать процедуру Oracle из под VB и "забрать" результат выборки, который возвращает процедура.
Ниже листинг с текстом процедуры. В ней выборка возвращается через курсорную переменную:
CREATE OR REPLACE PACKAGE Test_Pac
as
TYPE RetCurType IS REF CURSOR;
END Test_Pac;
/
CREATE OR REPLACE PROCEDURE TEST_sp (Test_Cursor IN OUT Test_Pac.RetCurType)
AS
BEGIN
OPEN Test_Cursor FOR
SELECT * FROM Test_Table;
END;
/
У меня не получается взять результат этой выборки в VB.
Пробую сделать так:
Public Sub Test()
Dim cnn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
cnn.Open "DRIVER={ORACLE ODBC DRIVER};SERVER=xxx;UID=xxx;DBQ=xxx;Password=xxx"
Set cmd.ActiveConnection = cnn
cmd.CommandText = "TEST_sp"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.CommandTimeout = 0
If rst.State = adStateOpen Then
rst.Close
End If
rst.Open cmd, , adOpenDynamic, adLockBatchOptimistic, adCmdStoredProc
Do Until rst.EOF
'... обработка полученной записи
rst.MoveNext
Loop
rst.Close
Set cnn = Nothing
Set cmd = Nothing
Set rst = Nothing
End Sub
При работе выдает ошибку: "3708 Parameter object is have improperly defined..."
Что делаю не так?
Может кто-то сталкивался уже с такой проблемой или знает другие варианты ее решения (не через курсорную переменную).
Вариант с помещением результата выборки во временную таблицу не годится.

Решение задачи: «Вызов Oracle процедуры через ADO»

textual
Листинг программы
SELECT FUNC1(PAR1) FROM DUAL

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5