Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вывести во view global temporary table или... / 5 сообщений из 5, страница 1 из 1
29.05.2013, 13:37
    #38278385
kalupator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести во view global temporary table или...
Добрый день. есть 2 бд: luw 9.7 & iSeries 6.1
Есть система отчетности, которая работает с view.
Нужно во View вывести рекорды, которые формируются хранимкой. Для iSeries 6.1 все быстро решилось через табличную функцию и сессионную таблицу.

Код: plsql
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.
34.
35.
36.
--подготовка данных для отчета
create procedure report.sp_rpt()
	language sql
	modifies sql data
	dynamic result sets 1
begin
    declare c1 cursor with return for
    select * from session.rpt;

    declare global temporary table session.rpt (gt1 char(254), gt2 char(254), gt3 char(254), gt4 char(254), gt5 char(254)) 
    on commit preserve rows
    with replace;

    --алгоритм формирования... тут упрощено намеренно естественно =)
    insert into session.rpt (gt1,gt2,gt3,gt4,gt5) values ('a','b','c','d','e');
    insert into session.rpt (gt1,gt2,gt3,gt4,gt5) values ('a','b','c','d','e');

    open c1;
  return;
end
@

--промежуточная табл. ф-ия для возврата данных из сессионной таблицы
create function report.fn_rpt()
	returns table (fld1 char(254),fld2 char(254),fld3 char(254),fld4 char(254),fld5 char(254))
	language sql
	modifies sql data
begin atomic
  call report.sp_not_acc_docs_rpt();
  return (select gt1,gt2,gt3,gt4,gt5 from session.rpt);
end
@

--сама view
create view v_rpt as
  select a.fld1,a.fld2,a.fld3,a.fld4,a.fld5 from table(report.fn_rpt()) a



проблемы с luw... при компиляции function report.fn_rpt компилятор в упор не видит session.rpt
Код: plsql
1.
Имя "SESSION.RPT" не было определено.. SQLCODE=-204, SQLSTATE=42704, DRIVER=4.14.113



ладно, делаю
Код: plsql
1.
2.
create global temporary table session.rpt (gt1 char(254), gt2 char(254), gt3 char(254), gt4 char(254), gt5 char(254)) 
on commit preserve rows



функция компилируется, но нельзя создать view
Код: plsql
1.
Функция "report.FN_RPT" (с уникальным именем "..." ), изменяющая данные SQL, вызвана в недопустимом контексте. Код причины = "4".. SQLCODE=-20267, SQLSTATE=429BL, DRIVER=4.14.113



Подскажите, какие еще есть варианты возврата данных из хп во view, кроме recordset из java процедуры... нужно обойтись чистым language-sql?
Спасибо!
...
Рейтинг: 0 / 0
29.05.2013, 13:45
    #38278404
kalupator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести во view global temporary table или...
поправочка, неправильно имя написал, в report.fn_rpt call report.sp_rpt();
...
Рейтинг: 0 / 0
29.05.2013, 16:17
    #38278785
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести во view global temporary table или...
kalupator...
Подскажите, какие еще есть варианты возврата данных из хп во view, кроме recordset из java процедуры... нужно обойтись чистым language-sql?Добрый день.
Через массивы.
Создать row type с нужными полями и массив элементов этого типа.
Скалярная функция report.fn_rpt будет обрабатывать result set процедуры, записывать данные result set в массив и возвращать этот массив.
Наконец:
Код: sql
1.
2.
create view v_rpt as
  select a.fld1, ..., a.fldN from unnest(report.fn_rpt()) a(fld1, ..., fldN)
...
Рейтинг: 0 / 0
29.05.2013, 16:33
    #38278826
kalupator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести во view global temporary table или...
Mark Barinsteinkalupator...
Подскажите, какие еще есть варианты возврата данных из хп во view, кроме recordset из java процедуры... нужно обойтись чистым language-sql?Добрый день.
Через массивы.
Создать row type с нужными полями и массив элементов этого типа.
Скалярная функция report.fn_rpt будет обрабатывать result set процедуры, записывать данные result set в массив и возвращать этот массив.
Наконец:
Код: sql
1.
2.
create view v_rpt as
  select a.fld1, ..., a.fldN from unnest(report.fn_rpt()) a(fld1, ..., fldN)



Спасибо.
т.е. кроссплатформенного решения на sql для luw и iseries нет?
...
Рейтинг: 0 / 0
29.05.2013, 19:13
    #38279180
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывести во view global temporary table или...
kalupatorт.е. кроссплатформенного решения на sql для luw и iseries нет?Скорее всего нет, т.к. на DB2 for LUW:
Код причины = "4".. SQLCODE=-20267
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
> db2 ? "sql20267"
SQL20267N  The function "<function-name>" (specific "<specific-name>")
      modifies SQL data and is invoked in an illegal context. Reason
      code = "<reason-code>".
...
Reason-code:
...
4. The table function is used in the body of a view definition.
...
User response:
...
4. Remove the table function from the body of the view definition.
...
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вывести во view global temporary table или... / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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