Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Вызов хранимой процедуры DB2 из другой ХП  [new]
power-baa
Member

Откуда:
Сообщений: 159
Как из хранимой процедуры вызвать другую хранимую процедуру ?
31 окт 06, 10:19    [3333603]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4947
Из хранимой процедуры какой?
С, java, sql?
31 окт 06, 10:56    [3333960]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
power-baa
Member

Откуда:
Сообщений: 159
Mark Barinstein
Из хранимой процедуры какой?
С, java, sql?


из процедур SQL
про java я читал, что там другие хранимые процедуры
вызывать нельзя.
31 окт 06, 12:27    [3334831]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4947
Из процедур SQL:
1. Про статический метод вызова почитайте тут
2. Про динамический здесь

power-baa
про java я читал, что там другие хранимые процедуры
вызывать нельзя.
Еще как можно! Ссылочку дадите, где вы это прочитали?
31 окт 06, 12:49    [3335010]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
power-baa
Member

Откуда:
Сообщений: 159
Mark Barinstein
Из процедур SQL:
1. Про статический метод вызова почитайте тут
2. Про динамический здесь

power-baa
про java я читал, что там другие хранимые процедуры
вызывать нельзя.
Еще как можно! Ссылочку дадите, где вы это прочитали?


Из этого не понятно как делать вызов из SQL процедуры.
Про java я читал в своём инф. центре.
31 окт 06, 14:24    [3335717]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4947
CREATE PROCEDURE TEST1(IN I INT, OUT J INT)
LANGUAGE SQL
BEGIN
  SET J=2*I;
END@

CREATE PROCEDURE TEST2(IN I INT, OUT J INT)
LANGUAGE SQL
BEGIN
  CALL TEST1(I,J);
END@

CALL TEST2(I,?)@
31 окт 06, 15:27    [3336214]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
golsa
Member

Откуда: Красноярск
Сообщений: 789
2 Mark Barinstein
Это про то, что из SQL/С SP нельзя вызывать JAVA SP и наоборот.
1 ноя 06, 08:45    [3338823]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4947
golsa
Это про то, что из SQL/С SP нельзя вызывать JAVA SP и наоборот.
В v7, вероятно, так и было (точно уже не помню).
В v8.2 единственное ограничение, которое я нашел (тут), это невозможность обработать result set в SQL SP, вызвавшей external SP.
См. также
Routine invocation
Java sp
1 ноя 06, 11:01    [3339533]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
power-baa
Member

Откуда:
Сообщений: 159
Mark Barinstein
CREATE PROCEDURE TEST1(IN I INT, OUT J INT)
LANGUAGE SQL
BEGIN
  SET J=2*I;
END@

CREATE PROCEDURE TEST2(IN I INT, OUT J INT)
LANGUAGE SQL
BEGIN
  CALL TEST1(I,J);
END@

CALL TEST2(I,?)@


А если я хочу набор данных, возвращаемый вызванной процедурой,
поместить в курсор ?
1 ноя 06, 13:21    [3340874]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4947
1. Вызываемая процедура должна декларировать курсор(ы) как
WITH RETURN TO CALLER
2. Делаете CALL
3. Потом
ASSOCIATE LOCATORS
4. И. наконец,
ALLOCATE CURSOR
1 ноя 06, 13:40    [3341069]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
power-baa
Member

Откуда:
Сообщений: 159
Mark Barinstein
1. Вызываемая процедура должна декларировать курсор(ы) как
WITH RETURN TO CALLER
2. Делаете CALL
3. Потом
ASSOCIATE LOCATORS
4. И. наконец,
ALLOCATE CURSOR


DECLARE LOC1 RESULT_SET_LOCATOR VARYING;
DECLARE LOC2 RESULT_SET_LOCATOR VARYING;

CALL PD190439.BA_01(30);
ASSOCIATE RESULT SET LOCATORS (LOC1, LOC2)
WITH PROCEDURE PD190439.BA_01;
ALLOCATE C1 CURSOR FOR RESULT SET LOC1;
OPEN C1;

Данных на выходе нет . Курсор пуст. Почему ?
2 ноя 06, 11:07    [3345861]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4947
Потому что эти команды предназначены для обработки курсора в вызывающей процедуре.
Если надо, чтоб курсор выдавался из внутренней процедуры наружу (клиенту), надо делать так:
CREATE PROCEDURE T1()
LANGUAGE SQL
DYNAMIC RESULT SETS 1
BEGIN
  DECLARE C1 CURSOR WITH RETURN TO CLIENT FOR
   SELECT * FROM SYSIBM.SYSDUMMY1;
  OPEN C1;
END@

CREATE PROCEDURE T2()
LANGUAGE SQL
DYNAMIC RESULT SETS 1
BEGIN
  CALL T1();
END@
2 ноя 06, 11:29    [3346038]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
Николаха
Member

Откуда: Улан-Удэ (это где оз.Байкал)
Сообщений: 243
Т.е. как я понял, если процедура возвращает какой-то курсо (Набор данных) его никак нельзя получить в вызываемой процедуре??
22 апр 08, 04:26    [5577434]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
чя321
Guest
Нет читай внимательно документацию
22 апр 08, 10:44    [5578151]     Ответить | Цитировать Сообщить модератору
 Re: Вызов хранимой процедуры DB2 из другой ХП  [new]
Николаха
Member

Откуда: Улан-Удэ (это где оз.Байкал)
Сообщений: 243
чя321
Нет читай внимательно документацию


Всё, спасибо я понял!
24 апр 08, 03:53    [5588500]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить