Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Выходные значения хранимых процедур. / 12 сообщений из 12, страница 1 из 1
17.05.2016, 11:10
    #39237167
ais612
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
Можно ли в DB2 из хранимой процедуры получить OUTPUT параметры в виде таблицы?
...
Рейтинг: 0 / 0
17.05.2016, 11:26
    #39237181
m&m
m&m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
ais612,

все параметры можно посмотреть в спецификации процедуры в системном каталоге.

если речь про то, чтобы при вызове процедуры получить результат в виде датасета (набора строк),
то можно через курсор например):
CREATE PROCEDURE BLA_BLA (param1,...)
DYNAMIC RESULT SETS 1
...
...
Рейтинг: 0 / 0
17.05.2016, 11:40
    #39237205
ais612
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
m&m,
Можно полный пример?
Раньше работал на InterBase. Портирую сейчас хранимки на Db2. В одной из хранимок идет обработка селекта построчно и выводится через саспенд. Можно ли что-то подобное сделать в db2?
...
Рейтинг: 0 / 0
17.05.2016, 12:12
    #39237237
m&m
m&m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
ais612,

--простейший пример - вызов из командной строки
--пример таблицы:
$ db2 "select * from tab1"

ID NAME ID2
----------- ---------- -----------
10 QQQQQ 10
20 WWWWW 10
30 EEEEE 20
40 RRRRR 20
50 TTTTT 20
60 YYYYY 20

6 record(s) selected.

--создать файл с процедурой
$ vi crtproc.sql
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE or replace PROCEDURE get_dataset(idx int)
DYNAMIC RESULT SETS 1
P1: BEGIN
-- Declare cursor
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT name from tab1 where id2=idx;
OPEN cursor1;
END P1
@



--и выполнить
$ db2 -td@ -vf crtproc.sql
CREATE or replace PROCEDURE get_dataset(idx int)
DYNAMIC RESULT SETS 1
P1: BEGIN
-- Declare cursor
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT name from tab1 where id2=idx;
OPEN cursor1;
END P1

DB20000I The SQL command completed successfully.

--и можно вызывать:

$ db2 "call get_dataset(20)"


Result set 1
--------------

NAME
----------
EEEEE
RRRRR
TTTTT
YYYYY

4 record(s) selected.

Return Status = 0

$ db2 "call get_dataset(10)"


Result set 1
--------------

NAME
----------
QQQQQ
WWWWW

2 record(s) selected.

Return Status = 0
...
Рейтинг: 0 / 0
17.05.2016, 12:19
    #39237245
ais612
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
m&m, кажется разобрался
Сделал вот такую маленькую процедуру для теста.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE or REPLACE PROCEDURE TEST 
(in ind_p char(11)) 
	DYNAMIC RESULT SETS 2
P1: BEGIN
declare @npp smallint; 
declare @nvag char(8);
declare global temporary table session.swt_stan (npp1 smallint, nvag1 char(8)) WITH REPLACE ON COMMIT PRESERVE ROWS
    NOT LOGGED ON ROLLBACK DELETE ROWS;    
     FOR v AS cur1 CURSOR FOR
     SELECT npp, nvag  FROM WEBUSER.P_VAG where IND_POEZD=ind_p
     DO
     /*FETCH cur1 into @npp, @nvag;*/
      set @npp = v.npp;
      set @nvag = v.nvag;
     insert into session.swt_stan(npp1,nvag1) values (@npp, @nvag);          	
     END FOR;
     p2: begin
     DECLARE cursor1 CURSOR WITH RETURN FOR
     select npp1, nvag1 from session.swt_stan;         
     open cursor1;
     end p2;           
	END P1 
...
Рейтинг: 0 / 0
17.05.2016, 13:39
    #39237369
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
ais612m&m,
Можно полный пример?
Раньше работал на InterBase. Портирую сейчас хранимки на Db2. В одной из хранимок идет обработка селекта построчно и выводится через саспенд. Можно ли что-то подобное сделать в db2?

CREATE FUNCTION (sql, table)
https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0003493.html?cp=SSEPGG_9.7.0/2-10-6-68&lang=en

вместо suspend'а - pipe.

Но лучше бы вы перед этим почитали DB2 cookbook by Birchall. Потому что выше ужас какой-то написан.
...
Рейтинг: 0 / 0
17.05.2016, 14:42
    #39237450
knudsen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
ais612,

...
Рейтинг: 0 / 0
17.05.2016, 15:37
    #39237511
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
...
Рейтинг: 0 / 0
18.05.2016, 07:48
    #39237847
ais612
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
Victor Metelitsa, Даже этот стандартный пример не работает.
Ругается на то что перед PIPE нет RETURN. Окей ставлю RETURN перед PIPE и ругается уже на вторую строку:
В условии "RETURNS" есть повторные или конфликтующие ключевые слова.. SQLCODE=-628, SQLSTATE=42613, DRIVER=4.13.111
Из-за чего это может быть? Версия DB2 10.1.0 express-c.
...
Рейтинг: 0 / 0
18.05.2016, 08:16
    #39237857
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
Вы же первоначально не написали версию DB2. Сейчас "актуальная" 10.5, причём (в отличие от Oracle) Express-C де-факто чинится, то есь сейчас с сайта скачивается 10.5.7 . Но я повторю - лучше почитайте для начала DB2 cookbook, автор Birchal. Чтобы выяснить, что можно сделать одним запросом, безо всяких хранимых процедур и функций. (последняя версия книжки для DB2 9.7, но это не очень важно, хотя и прибавилось любопытных вещей).
...
Рейтинг: 0 / 0
18.05.2016, 08:28
    #39237864
ais612
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
Victor Metelitsa, Так PIPE не работает как надо из-за версии?
p.s. книгу уже читаю
...
Рейтинг: 0 / 0
18.05.2016, 09:43
    #39237918
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выходные значения хранимых процедур.
http://www.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.wn.doc/doc/c0054107.html

In DB2 Version 10.1 Fix Pack 2 and later fix packs, support is added for pipelined table functions in PL/SQL and SQL PL.

-- http://www.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.wn.doc/doc/c0060686.html

Ввиду того, что IBM-еры нередко, хотя с некоторым опозданием и не всегда, выкладывают на скачку патченые Express-C, дистрибутивы Express-C 10.1 c PIPE тоже должны быть, но их так просто не скачать, потому что на сайте предлагается только самая последняя версия.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Выходные значения хранимых процедур. / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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