powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Запуск хранимой процедуры внутри другой и возврат значений для продолжения выполнения
6 сообщений из 6, страница 1 из 1
Запуск хранимой процедуры внутри другой и возврат значений для продолжения выполнения
    #39913087
AVRomanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Возможен ли такой сценарий, когда процедура с параметрами возвращает результат выполнения в корневую процедуру, которая запустила первую, и которая продолжает работу с результатами выполнения первой процедуры?
В первом придближении такой вид:
Код: sql
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.
CREATE OR REPLACE PROCEDURE SCHEMA.PROC_1
IS  

  DECLARE
  
    REZ_1 DOUBLE;
    REZ_2 DOUBLE;
    
  CURSOR CURSOR_PREVIOUS_RESERVE
  IS    
    
  SELECT... --формируем выборку для курсора
  
  FOR PREVIOUS_RESERVE in CURSOR_PREVIOUS_RESERVE LOOP
  
    REZ_1 := 0;
    REZ_2 := 0;
    
    CALL SCHEMA.PROC_2 (PARAM1 IN, PARAM_2 IN, PARAM_3 OUT, PARAM_4 OUT)
   
    -- Передаем выходные значения PROC_2 в текущие переменные
    REZ_1 := PARAM_3;
    
    REZ_2 := PARAM_4;
  
    /*
       Продолжаем работу процедуры с последующими инструкцими SELECT/UPDATE
    */
  COMMIT;
  
  END LOOP;
  
END;


Или, может быть, есть другой вариант, где вторую процедуру вызывать через EXECUTE IMMEDIATE, а внутри второй процедуры так же вызывать 3-ю, которая была бы продолжением первой...так как на DB2 не нашел никакой достоверной информации, что это, в принципе, возможно...
...
Рейтинг: 0 / 0
Запуск хранимой процедуры внутри другой и возврат значений для продолжения выполнения
    #39913114
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AVRomanenko,

Добрый день.

RETURN statement in SQL procedures .
Получить возвращенное значение можно с помощью GET DIAGNOSTICS statement , присвоив переменной значение DB2_RETURN_STATUS (Example 2 в последней ссылке).

Если же вы про OUT параметры и как с ними работать, то Parameters in SQL procedures .
...
Рейтинг: 0 / 0
Запуск хранимой процедуры внутри другой и возврат значений для продолжения выполнения
    #39913316
AVRomanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,
первая проблема в том, что вызов одной процедуры внутри второй вызываешь ошибку.
...
Рейтинг: 0 / 0
Запуск хранимой процедуры внутри другой и возврат значений для продолжения выполнения
    #39914175
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AVRomanenko,

Если вы пишете на PL/SQL в режиме совместимости с Oracle, то процедуры там вызываются без CALL, как в SQL/PL (DB2 диалект).
Procedure references (PL/SQL) .
...
Рейтинг: 0 / 0
Запуск хранимой процедуры внутри другой и возврат значений для продолжения выполнения
    #39914853
AVRomanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein, вызывается, спасибо!
следующая проблема...непонятно как возвращать результат выполнения процедуры....
допустим, есть процедура:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE PROCEDURE PROC_TEST(CURR_DT IN DATE, RESULT OUT INTEGER)
IS

V_CL_ID INTEGER;

BEGIN
        SELECT
            COLUMN_1 INTO V_CL_ID
        FROM TABLE_1
        WHERE COLUMN_2 = CURR_DT;
        
        RESULT :=V_CL_ID;
END;


и корневая, которая эту процедуру вызывает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE PROCEDURE PROC_1
IS
  V_CL_ID       INTEGER;
  
BEGIN
  
  V_CL_ID := PROC_TEST(DATE('2020-01-16'), /* ? */);
  
END;


что нужно писать вместо параметра OUT при ее вызове?
и могу ли я вот так результат выполнения присвоить к переменной?
...
Рейтинг: 0 / 0
Запуск хранимой процедуры внутри другой и возврат значений для продолжения выполнения
    #39914911
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AVRomanenkoчто нужно писать вместо параметра OUT при ее вызове?
Имя переменной вызывающей процедуры.
AVRomanenkoмогу ли я вот так результат выполнения присвоить к переменной?Насколько я знаю, в PL/SQL - нет.
Если надо что-то возвращать из процедуры, то через OUT параметры.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Запуск хранимой процедуры внутри другой и возврат значений для продолжения выполнения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]