|
|
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
Привет всем! Такая проблема. Есть ХП, которая возвращает result set. create procedure MyProc() begin select * from Customers; end; Есть прога на Дельфи, которая выполняет эту ХП через ODBC API. Во-первых , SQLProcedureColumns возвращает колич. параметров у этой процедуры равное количеству полей в таблице Customers. По сути получается все поля таблицы маппируются в неявные out параметры ХП. Во-вторых . Если параметры не подвязывать (SQLBindParameter), то при выполнении (SQLExecute/SQLExecDirect) ODBC выдает общую ошибку 'Count fields incorrect', что и понятно, так как у ХП определяются параметры. В-третьих . Если я подвязываю параметры, то после (SQLExecute/SQLExecDirect) выдает ошибку ASA ODBC драйвер 'Wrong number of parameters to function [MyProc]'. Но параметры подвязаны все... Вообще не понятен принцип работы с такой процедурой. Она дожна возвращать result set. Причем здесь параметры? Никто с такой проблемой не сталкивался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 12:50 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:03 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
У ХП могут быть нормальные (IN/OUT/INOUT) параметры и параметры полей набора данных (result). Насчет ODBC API ничего сказать не могу, но явно Вы что то не так делаете, так как если работать с процедурами через тот же драйвер ODBC, то параметры отделяются от полей и все прекрасно видится и вызывается. P.S. Так же result-параметры можно явно перечислить в процедуре ключевым словом RESULT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:07 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
Redbor Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Я не через BDE работаю, но принцип использую тот же. Вот как раз во время Open (на вызове SQLExecDirect('call MyProc(?,?,?...)')) и возникает описанная ошибка. Я и написал, что подвязываю все параметры и вызываю SQLExecDirect('call MyProc(?,?,?,?,?...)') а получаю ошибку во время исполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:07 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
Либо нужно указать опцию RESULT в CREATE PROCEDURE, либо явно задать имена столбцов в предложении SELECT. P.s. Никогда не используйте SELECT * в процедурах, триггерах и пакетниках. ASA компилирует их один раз при первом обращении. Причем при компиляции подставляет вместо звездочки имена всех столбцов в таблице. Если в последствие вы измените количество или названия столбцов, то эти процедуры начнут генерировать непонятные на первый взгляд ошибки. Когда, наконец, поймете, что произошло, вам придется перезапускать сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:10 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
ASCRUSУ ХП могут быть нормальные (IN/OUT/INOUT) параметры и параметры полей набора данных (result). Насчет ODBC API ничего сказать не могу, но явно Вы что то не так делаете, так как если работать с процедурами через тот же драйвер ODBC, то параметры отделяются от полей и все прекрасно видится и вызывается. P.S. Так же result-параметры можно явно перечислить в процедуре ключевым словом RESULT. Я делал и так, описывал все параметры с ключевым словом Result. Результат (<g>) такой же. Вот и хочу понять, что я не так делаю... Процедуры типа create proc....(out a integer, out b string) begin set a = 1; set b = 'sdfgdfad'; end; выполняются нормально... А вот c result set беда. А там не нужно еще указывать какие-нибудь ключевые слова? Или вызывать ее как-то по-другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:12 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
create procedure MyProc() result (a,b) begin select a,b from Customers; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:16 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
old_joycreate procedure MyProc() result (a,b) begin select a,b from Customers; end; Вот так же сейчас и проверял, тока с одним полем "а". Вызов "call DBA.MyProc(?)"... А результат (<g>) все тот же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:18 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
Alex Daryin old_joycreate procedure MyProc() result (a,b) begin select a,b from Customers; end; Вот так же сейчас и проверял, тока с одним полем "а". Вызов "call DBA.MyProc(?)"... А результат (<g>) все тот же А зачем Вы ей параметр передаете, если его нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:25 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
ASCRUS... так как если работать с процедурами через тот же драйвер ODBC, то параметры отделяются от полей и все прекрасно видится и вызывается. А как параметры отделяются от полей в данном случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:28 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
old_joyА зачем Вы ей параметр передаете, если его нет ? А я его не передаю, просто подвязываю SQLBindParameter и все..., чтобы туда вернулось нужное мне значение.. Если не подвязвать, а вызывать "call MyProc()", то ругнется ODBC и скажет "COUNT fields incorrect"... что значит: "Подвязывай нужное количество параметров..". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:32 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
Пример для Си, взят из BOL ASA 9.0.1: Код: 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. P.S. И зачем Вам сдался ODBC API ? Чем стандартные то средства доступа не устраивают, зачем все это ручками писать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:53 |
|
||
|
Хранимые процедуры в ASA 8.0.1.3044
|
|||
|---|---|---|---|
|
#18+
ASCRUSПример для Си, взят из BOL ASA 9.0.1: Код: 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. P.S. И зачем Вам сдался ODBC API ? Чем стандартные то средства доступа не устраивают, зачем все это ручками писать ? Да, все заработало... спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2004, 13:55 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32730004&tid=2014175]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 401ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...