Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
Всем, привет! пытаюсь понять логику работы хранимых процедур... создал тестовую процедуру для создания записи в таблице персонала, которая возвращает ИД сотрудника CREATE PROCEDURE PARTNER_SET ( IN id integer, IN first_name VARCHAR(40), IN middle_name VARCHAR(40), IN last_name VARCHAR(40), IN sex VARCHAR(20), IN parentid integer, IN birth VARCHAR(20), person_id integer ) LANGUAGE SQL P1: BEGIN -- Объявить переменную DECLARE PERSON_TMP INTEGER DEFAULT 0; SELECT id into PERSON_TMP FROM FINAL TABLE (INSERT INTO PERSONS (FIRST_NAME, MIDDLE_NAME, LAST_NAME, SEX, PARENTID, BIRTH) VALUES (PARTNER_SET.first_name, PARTNER_SET.middle_name, PARTNER_SET.last_name, 1, PARTNER_SET.parentid, PARTNER_SET.birth)); SET person_id = PERSON_TMP; END P1 потом пытаюсь получить результаты работы процедуры call partner_set(1,'1','1','1','1',3,'01/01/2009',?) "не выходит каменный цветок"... :) IBM Data Studio Developer Версия 2.1 открывает окно для ввода значения для переменной "?" как будто это входная переменная... в чем я "согрешил" ? и что также немаловажно... а не лучше ли для случаев, когда возвращается только одно значение использовать SQL-function а не SQL-procedure[src][/SRC] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 09:25 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
jack_nskCREATE PROCEDURE PARTNER_SET ( IN id integer, IN first_name VARCHAR(40), IN middle_name VARCHAR(40), IN last_name VARCHAR(40), IN sex VARCHAR(20), IN parentid integer, IN birth VARCHAR(20), OUT person_id integer ) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 10:07 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
спасибо, Марк! такой вариант у меня тоже был... :) call partner_set(1,'1','1','1','1',3,'01/01/2009',?) выполняется, но ничего не возвращает... кроме того полагаю, что кроме сохранения процедуры нужно было и размещать её... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 10:28 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
однако походил по постам форума с поиском по call никак не могу получить эффект, чтобы увидеть возвращаемый процедурой результат в моем варианте получаю что-то типа execute procedure а не select from procedure уж извините для ИБ-терминологию... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 15:43 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
jack_nsk, Из процедуры можно возвратить 1 или несколько result set'ов и/или выходных параметров. Что вам нужно? Если не сложно, покажите схематично хотя бы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 16:01 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 16:06 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
cпасибо, Семен! насколько я понял, и IDENTITY_VAL_LOCAL() и SELECT id FROM FINAL TABLE извлекают текущий указатель столбца идентификации. буду определяться в дальнейшем. to Mark перевел лотусовую базу на режим хранения в дб2, на основные формы создал DBAccessView и пытаюсь привести информацию в нормализованных вид для "оцифровывания" и последующих обработок. в одной таблице есть поля о родителе и его детях (имена, даты рождения и т.д.) т.к. количество детей может быть переменным, то естественным является решение о переносе данных о конкретном индивиде в отдельную таблицу с указанием в отдельном поле ссылки на родителя. С учетом того, что информация в исходной таблице слабо типизирована, а если точнее сказать, то является текстовой переменной с различными вариантами написания, то для её "причесывания" необходим достаточно большой кусок кода, который для улучшения читабельности и улучшения управления кодом желательно запаковать в хранимую процедуру. С учетом того, что при создании записи персоны нужно указывать код родителя, этот код должна возвращать или SQL-процедура или SQL-функция в пределах одной транзакции, которая обрабатывает одну исходную запись в DBAccessView ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2009, 18:15 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
Я про это спрашивал:jack_nskоднако походил по постам форума с поиском по call никак не могу получить эффект, чтобы увидеть возвращаемый процедурой результатКакой результат вам нужен? В виде result set или в виде выходного параметра? В какой клиентской программе вы не можете увидеть результат? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 10:44 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
если с практической точки зрения, то возврат в переменную внутри хранимой процедуры если с образовательно-познавательной, то увидеть любые результаты, которые возвращает IBM Data Studio Developer - изнемогаю от любопытства... :) пока вижу, что процедура работает, но на выход ничего не выдает... конечно это может быть в настройках IBM Data Studio Developer, но он для меня тоже новый инструмент... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 11:04 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
jack_nskесли с практической точки зрения, то возврат в переменную внутри хранимой процедуры если с образовательно-познавательной, то увидеть любые результаты, которые возвращает IBM Data Studio Developer - изнемогаю от любопытства... :) пока вижу, что процедура работает, но на выход ничего не выдает... конечно это может быть в настройках IBM Data Studio Developer, но он для меня тоже новый инструмент...Вот вам пример. Добейтесь, чтоб было так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Обратите внимение, что если надо, чтоб процедура возвращала result set, то надо - dynamic result set 1 - cursor with return ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2009, 11:24 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
Марк, спасибо! особенно за терпение... :) почитал ответы, полистал форум, заглянул на ИБМ и кажется понял, как сформулировать свой вопрос... :) насколько я понял, для тех случаев, когда из процедуры нужно вернуть данные, то основным инструментом для этого предназначен курсор. что он дает: 1. отпадает необходимость прописывать в процедуре выходные параметры, т.к. список возвращаемых параметров формируется при декларировании или prepare курсора (это например по сравнению с ИБ) 2. на клиенте появляется возможность выбрать либо n-записей из курсора или весь курсор получается, что выходные параметры в хранимой процедуре это что-то типа рудимента ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2009, 18:43 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
jack_nskнасколько я понял, для тех случаев, когда из процедуры нужно вернуть данные, то основным инструментом для этого предназначен курсор. ... получается, что выходные параметры в хранимой процедуре это что-то типа рудимента ?Нет. Каждый способ возврата данных предназначен для своих целей. Если мне надо вернуть из процедуры 1 или несколько значений, я не буду использовать курсоры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2009, 09:56 |
|
||
|
возврат результатов из ХП
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinНет. Каждый способ возврата данных предназначен для своих целей. Марк, не могли бы вы перечислить (или дать ссылку на источник, где есть ответ) способы возврата данных из ХП в случае, если внутри ХП отрабатывает select и мне нужен результирующий набор строк. Предыдущий проект был на Oracle, теперь приходится осваивать DB2 (9.5, 9.7, win32). Вижу массу сходств и не понимаю, почему их так много. В IBM решили реализовать основную часть оракловых фишек у себя, чтобы желающие могли легко перейти на DB2? Или как? Откуда столько пересечений? В том же Оракле, на ск. я понимаю, практически единственный нормальный способ вернуть результат селекта в хранимке - это "ref cursor". Что предлагает на эту тему DB2? Все так же или вар-тов больше? Про dynamic result set. Как схематически может выглядеть ХП, из которой я собираюсь вернуть более одного резалтСэта? Что нужно сделать, чтобы вернуть неск. резалтСэтов - открыть неск. курсоров, сделать неск. селектов? Спецификаторы 'reads sql data', 'modifies sql data' и остальные, указываемые про создании ХП - они фактически влияют на что? Они нужны оптимизатору или еще где-то как-то выстреливают? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2010, 23:23 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=35956422&tid=1602562]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
232ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 286ms |
| total: | 617ms |

| 0 / 0 |
