powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вывести во view global temporary table или...
5 сообщений из 5, страница 1 из 1
Вывести во view global temporary table или...
    #38278385
kalupator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. есть 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
Вывести во view global temporary table или...
    #38278404
kalupator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поправочка, неправильно имя написал, в report.fn_rpt call report.sp_rpt();
...
Рейтинг: 0 / 0
Вывести во view global temporary table или...
    #38278785
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Вывести во view global temporary table или...
    #38278826
kalupator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Вывести во view global temporary table или...
    #38279180
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
5 сообщений из 5, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вывести во view global temporary table или...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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