Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / можно создать временная таблица в функции - ibm db2 v9.7 / 5 сообщений из 5, страница 1 из 1
15.10.2010, 11:20
    #36900913
shahruz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно создать временная таблица в функции - ibm db2 v9.7
...
Рейтинг: 0 / 0
15.10.2010, 12:30
    #36901152
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно создать временная таблица в функции - ibm db2 v9.7
В скалярной ф-ции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create function f(...)
returns  data_type 
modifies sql data
begin
  ...
  execute immediate 'declare global temporary table t(i int) with replace on commit preserve rows not logged';
  ...
  return ...;
end@

В табличной ф-ции надо делать call процедуры, которая это будет делать.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.02.2013, 12:07
    #38166110
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно создать временная таблица в функции - ibm db2 v9.7
Здравствуйте! Подниму тему, а можно ли создать времянку в cкалярной функции и заполнить её динамически результатами:

Код: 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.
   CREATE OR REPLACE  FUNCTION TEMP.tools_j
      ( STR_FROM	VARCHAR(2000), SIMB VARCHAR(10))
        RETURNS VARCHAR(32672)
      BEGIN 
           DECLARE STR_EXEC   VARCHAR(32000); 
           DECLARE STR_RESULT VARCHAR(32000);
           
           SET STR_EXEC = ' DECLARE GLOBAL TEMPORARY TABLE SESSION.JOIN_DAT '          
           || ' (ID Integer NOT NULL  GENERATED ALWAYS AS IDENTITY(START WITH 1,           
           INCREMENT BY 1, NO MINVALUE, NO MAXVALUE, CACHE 20), ' 
           || 'COL1 VARCHAR(100) ) '
           || ' with replace on commit preserve rows not logged';
            
           -- создадим времянку
           execute immediate STR_EXEC;
           SET STR_EXEC = 'insert into SESSION.JOIN_DAT (COL1) ' || STR_FROM;          
           -- вставим данные во временную таблицу резултат
           execute immediate STR_EXEC;
           -- вычисляем результат
           set STR_RESULT = (select listagg(cast(COL1 as VARCHAR(32000)) ,SIMB) 
                from  SESSION.JOIN_DAT);
           -- возвращаем строку с данными 
           RETURN cast(STR_RESULT as VARCHAR(32000));
      END;



При вызове пишется ошибка:
Lookup Error - DB2 Database Error: ERROR [38002] [IBM][DB2/NT64] SQL0577N
User defined routine "" (specific name "") attempted to modify data but was not defined as MODIFIES SQL DATA or was used in a context that does not allow MODIFIES SQL DATA.

Пробовал через вызов процедуры insert делать те же грабли. ..
...
Рейтинг: 0 / 0
26.02.2013, 16:27
    #38166754
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно создать временная таблица в функции - ibm db2 v9.7
medoed,

Здравствуйте.

Можно, только надо определить функцию как MODIFIES SQL DATA, и использовать эту функцию можно только в операторе SET.
См. замечание (3) про MODIFIES SQL DATA в
CREATE FUNCTION (SQL scalar, table, or row) statement
...
Рейтинг: 0 / 0
26.02.2013, 17:47
    #38166909
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно создать временная таблица в функции - ibm db2 v9.7
A Lot of Thanks!
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / можно создать временная таблица в функции - ibm db2 v9.7 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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