|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
Добрый день! Возникла такая проблема: Необходимо вызвать процедуру 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..." Что делаю не так? Может кто-то сталкивался уже с такой проблемой или знает другие варианты ее решения (не через курсорную переменную). Вариант с помещением результата выборки во временную таблицу не годится. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2005, 16:57 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
Похоже, надо как-то еще параметры определить в коде VB. Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Может, не проходит объявление переменных cnn, cmd и rst. Попробуй объявить через Dim без New, а в потом через Set: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2005, 07:52 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
Этот вопрос нужно задавать в форуме Oracle. Процедура не может вернуть RecordSet! Процедура может записать результат в temporary table, а потом можно сделать по ней select. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2005, 16:11 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
вот кусочек кода все рабочее только что вырезал из програмы Подключение через системный ODBC Public ADOcon As ADODB.Connection Dim ADOconUs As ADODB.Connection, rst As ADODB.Recordset Set ADOcon = New ADODB.Connection ADOcon.ConnectionTimeout = 0 ADOcon.Open "reg", "reg", "reg" Set rst = ADOcon.Execute("select distinct VALUE from REG_CDB_PAR where REG_CDB_PAR.Code like 'NAME_DC_RV'and REG_CDB_PAR.Owner like 'R2%'") While (Not rst.EOF) If rst(0) = "" Then MsgBox "Связь с БД отсутствует" If rst(0) = "" Then GoTo kin Label4.Caption = rst(0) rst.MoveNext Wend ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2005, 13:41 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
Вот пример пакета для использования с VB Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
а это как все выше написанное можно вызвать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2005, 14:38 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
Доброе время суток ! Необходимо вызвать функции из базы Oracle через ADO (OLE DB): Код: plsql 1.
Работоспособность функции проверена через sql+: Код: plsql 1. 2. 3.
Отрабатывает без ошибок. Теперь его из VBA вызываю так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
выдает ошибку - 3708 : Неправильно определен объект Parameter. Предоставлены несогласованные или неполные сведения. На этой строке: Код: vbnet 1.
Попробовал так: Код: vbnet 1.
Но в этом случае получаю ошибку: Run-time error '-2147217900 (80040e14): ORA-06502: PL/SQL: : буфер символьных строк слишком маленький ошибка числа или значения. Как решить проблему ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2015, 15:07 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
задать размер у параметра ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2015, 12:18 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
А это вообще нормально, задавать CMD.CommandType = adCmdStoredProc и при этом пытаться использовать функцию? Никогда раньше такого не видел. Думал, что только имя хранимки можно, а не ф-ии. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2015, 13:22 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
Konst_Oneзадать размер у параметра Где и как ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2015, 12:51 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
гр кА это вообще нормально, задавать CMD.CommandType = adCmdStoredProc и при этом пытаться использовать функцию? Никогда раньше такого не видел. Думал, что только имя хранимки можно, а не ф-ии. Функция тоже хранимая. Для него есть другой тип ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2015, 12:51 |
|
Вызов Oracle процедуры через ADO
|
|||
---|---|---|---|
#18+
Gabitгр кА это вообще нормально, задавать CMD.CommandType = adCmdStoredProc и при этом пытаться использовать функцию? Никогда раньше такого не видел. Думал, что только имя хранимки можно, а не ф-ии. Функция тоже хранимая. Для него есть другой тип ? вообще-то функция вызывается не как хранимая процедура, а как часть запроса. для такого случая есть тип команды adCmdSQLText и строка запроса должна быть типа Код: sql 1.
PS: за синтаксис не отвечаю, т.к с ораклом работал мало ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2015, 13:07 |
|
|
start [/forum/topic.php?fid=60&fpage=30&tid=2155864]: |
0ms |
get settings: |
11ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 353ms |
total: | 486ms |
0 / 0 |