Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Динамический фомирование данных из табличной функции? / 25 сообщений из 27, страница 1 из 2
18.02.2013, 13:54
    #38155598
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Приветствую!

Хочу сделать как то так, но понимаю, что такой return невозможен.
Есть ли возможность сделать такое в DB2,
Примерный скрипт ниже:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 CREATE OR REPLACE  FUNCTION TEMP.tools_join_base 
      ( STR_FROM	VARCHAR(2000), SIMB VARCHAR(10))
        RETURNS TABLE  ( STR_RESULT	VARCHAR(32000) )
      BEGIN  
         -- STR_FROM = 'select id from TEMP.TEST'
         declare STR_EXEC   varchar(3000);
         declare STR_RESULT varchar(32000);
         -- динамическая строка 
         set STR_EXEC =  STR_FROM;
         RETURN EXECUTE IMMEDIATE STR_EXEC ;
      END;



P.S. Написание функции на java не предлагать, нужно на субд и именно функцию, чтобы потом её в запросах использовать (в конструкции from)!
...
Рейтинг: 0 / 0
18.02.2013, 16:22
    #38155950
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Подскажите хотя бы это надо строго через вызов процедуры делать или же через cursor как то можно?
...
Рейтинг: 0 / 0
19.02.2013, 10:33
    #38156909
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
medoed P.S. Написание функции на java не предлагать, нужно на субд и именно функцию, чтобы потом её в запросах использовать (в конструкции from)!Здравствуйте.

В db2 функции можно писать как на языке SQL, так и на внешних языках, например JAVA, C.
При этом SQL запросу, который использует эту функцию, всё равно, на каком языке написана эта функция.
В табличных функциях на языке SQL нельзя использовать динамический SQL.
На java такая функция легко может быть реализована.
...
Рейтинг: 0 / 0
19.02.2013, 11:29
    #38157020
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Mark Barinsteinmedoed P.S. Написание функции на java не предлагать, нужно на субд и именно функцию, чтобы потом её в запросах использовать (в конструкции from)!Здравствуйте.

В db2 функции можно писать как на языке SQL, так и на внешних языках, например JAVA, C.
При этом SQL запросу, который использует эту функцию, всё равно, на каком языке написана эта функция.
В табличных функциях на языке SQL нельзя использовать динамический SQL.
На java такая функция легко может быть реализована.

Спасибо,Марк!
А можно ли написать скалярную функцию с динамическим курсором - которая возвращает одну строку (мне по сути 1-на длинная строка и нужна).
А потом из другой функции вызывать скалярную - для того чтобы обернуть в таблицу эту одну строку. Так возможно?

Пример скалярной как то так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE  FUNCTION TEMP.t_j
      ( STR_FROM	VARCHAR(2000))
        RETURNS VARCHAR(32000)
      BEGIN 
           DECLARE STR_RESULT VARCHAR(32000);
           DECLARE c1 CURSOR FOR s1;
           PREPARE s1 FROM STR_FROM;
           OPEN c1;
                   FETCH c1 INTO STR_RESULT;
           CLOSE c1;
           RETURN STR_RESULT;
      END;



P.S.
>>На java такая функция легко может быть реализована.
Эти внешние функции по-моему имели ограничения по работе c NickName - ми. Тоесть с MQT внешние функции работаю, с NickName нет!
...
Рейтинг: 0 / 0
19.02.2013, 13:17
    #38157269
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Вообщем что то получилось, написал две функции:

1) Скалярная, динамическая, возвращающая с помощью курсора - строку.
2) Табличная - просто вызывает первую и оформляет все в виде таблицы.

Выяснился баг, почему то длина строки в итоговой таблице, возвращаемой из табличной функции обрезается до 644 символов, если подставляю вместо вызова функции - реальное значение длинной строки - ничего не обрезается в табличной функции... Если просто попытаться вернуть строку из первой функции, тоже не обрезана.

Где баг в динамике, или же в курсоре, непонятно...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE  FUNCTION TEMP.t_j_b 
      ( STR_FROM	VARCHAR(4000), SIMB VARCHAR(10))
        RETURNS TABLE  ( STR_RES	   VARCHAR(32000) )
      BEGIN ATOMIC
           DECLARE STR_EXEC   VARCHAR(32000); 
           DECLARE STR_RESULT VARCHAR(32000);
           
          set STR_EXEC = 'select ' || 'listagg(' ||'cast( '
          || substr (STR_FROM, (values(locate('select',STR_FROM)) + 6), (values(locate('from',STR_FROM)) -   (values(locate('select',STR_FROM)) + 6)) )  
          ||' as varchar(32000)) '
          || ',' || '''' ||  simb || ''''|| ') ' 
          || substr(STR_FROM, (values(locate('from',STR_FROM))), (length(STR_FROM) - (values(locate('from',STR_FROM)))) ); 
           
          set STR_RESULT =  cast((values(TEMP.t_j_b_s(STR_EXEC))) as varchar(32000));           
           RETURN 
                    --select cast(STR_RESULT as varchar(32000)) from SYSIBM.SYSDUMMY1; 
                    values(cast(STR_RESULT as varchar(32000))) ;
      END;



Может кто подскажет?
...
Рейтинг: 0 / 0
19.02.2013, 14:56
    #38157469
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
medoed,

Можно через ж... массив попробовать :)
код
Код: sql
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.
-- скалярная
CREATE OR REPLACE FUNCTION GET_STR (P_SEL VARCHAR(4000))
RETURNS DBMS_OUTPUT.CHARARR
BEGIN 
  DECLARE SQLSTATE CHAR(5);
  DECLARE I INT DEFAULT 1;
  DECLARE ARR DBMS_OUTPUT.CHARARR;
  DECLARE c1 CURSOR FOR s1;

  PREPARE s1 FROM P_SEL;
  OPEN c1;
  FETCH c1 INTO ARR[I];
  WHILE SQLSTATE = '00000' DO
    SET I = I + 1;
    FETCH c1 INTO ARR[I];
  END WHILE;
  CLOSE c1;
  RETURN ARR;
END@

-- табличная
CREATE OR REPLACE FUNCTION GET_STR_T (P_SEL VARCHAR(4000))
RETURNS TABLE(STR VARCHAR(32672))
RETURN SELECT STR FROM UNNEST(GET_STR(P_SEL)) T(STR)@

-- тест
SELECT STR
FROM TABLE(GET_STR_T('SELECT TABNAME FROM SYSCAT.TABLES FETCH FIRST 10 ROWS ONLY'))@


...
Рейтинг: 0 / 0
19.02.2013, 14:57
    #38157473
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
medoed,
Упрощу вопрос. Есть одна функция:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE  FUNCTION TEMP.tools_join_base_str
      ( STR_FROM	VARCHAR(2000), SIMB VARCHAR(10))
        RETURNS VARCHAR(32000)
      BEGIN 
           DECLARE STR_EXEC   VARCHAR(4000); 
           DECLARE STR_RESULT VARCHAR(32000);
           DECLARE c1 CURSOR FOR s1;
          set STR_EXEC = 'select ' || 'listagg(' ||'cast( '
          || substr (STR_FROM, (values(locate('select',STR_FROM)) + 6), (values(locate('from',STR_FROM)) -   (values(locate('select',STR_FROM)) + 6)) )  
          ||' as varchar(32000)) '
          || ',' || '''' ||  SIMB || ''''|| ') ' 
          || substr(STR_FROM, (values(locate('from',STR_FROM))), (length(STR_FROM) - (values(locate('from',STR_FROM)))) ); 
           PREPARE s1 FROM  STR_EXEC ; 
           OPEN c1;
                    FETCH c1 INTO STR_RESULT;
           CLOSE c1;
           RETURN cast(STR_RESULT as VARCHAR(32000));
      END;



Вызов такой:
Код: plsql
1.
select * from table(values(TEMP.tools_join_base_str  ('select id_person from form.ISUER where ID_PERSON < 2000', ',')))



-- Обрубает строку до 644 символов, почему? Какие то ограничения на курсор?
...
Рейтинг: 0 / 0
19.02.2013, 14:59
    #38157476
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Mark Barinsteinmedoed,

Можно через ж... массив попробовать :)
код
Код: sql
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.
-- скалярная
CREATE OR REPLACE FUNCTION GET_STR (P_SEL VARCHAR(4000))
RETURNS DBMS_OUTPUT.CHARARR
BEGIN 
  DECLARE SQLSTATE CHAR(5);
  DECLARE I INT DEFAULT 1;
  DECLARE ARR DBMS_OUTPUT.CHARARR;
  DECLARE c1 CURSOR FOR s1;

  PREPARE s1 FROM P_SEL;
  OPEN c1;
  FETCH c1 INTO ARR[I];
  WHILE SQLSTATE = '00000' DO
    SET I = I + 1;
    FETCH c1 INTO ARR[I];
  END WHILE;
  CLOSE c1;
  RETURN ARR;
END@

-- табличная
CREATE OR REPLACE FUNCTION GET_STR_T (P_SEL VARCHAR(4000))
RETURNS TABLE(STR VARCHAR(32672))
RETURN SELECT STR FROM UNNEST(GET_STR(P_SEL)) T(STR)@

-- тест
SELECT STR
FROM TABLE(GET_STR_T('SELECT TABNAME FROM SYSCAT.TABLES FETCH FIRST 10 ROWS ONLY'))@




Через Ж.. не хочу))
Ваш пост не видел, когда уточнение опубликовывал, помогите с обрубаловым строки и я Вам буду готов проставиться пивом ))
...
Рейтинг: 0 / 0
19.02.2013, 16:04
    #38157579
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
medoed...
Через Ж.. не хочу))
Ваш пост не видел, когда уточнение опубликовывал, помогите с обрубаловым строки

Для вашего случая, т.е. когда число записей невелико (не измеряется тысячами), оно будет работать нормально.
В вашем примере я не буду разбираться - слишком много букв...

В моём примере при таком запросе ничего не обрубается:

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT length(STR) FROM TABLE(GET_STR_T('SELECT listagg(colcount, '','') FROM SYSCAT.TABLES'))

1          
-----------
       1649

  1 record(s) selected.
...
Рейтинг: 0 / 0
19.02.2013, 17:08
    #38157718
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Марк ещё раз спасибо.
Функция была верной и обрубалось из-за динамически не верной составленной строки в запросе - 0 -лик потерял. Научился динамику в функциях использовать))
...
Рейтинг: 0 / 0
21.03.2013, 13:59
    #38193178
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Срочно нужна помощь, в скалярной в функции на боевой возникают траблы...
Обе функции работают c NickName (FORM.FUN):

Итого, чтобы было понятно, сразу два примера

Вот то что работает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE OR REPLACE FUNCTION TEMP.TESTSC ()
  RETURNS INTEGER
BEGIN ATOMIC 
DECLARE STR_PER INTEGER;
SET STR_PER = (select MAX(ID_PERSON) from FORM.FUN where ID_PERSON_FUND_PARENT  <50);
RETURN STR_PER;
END;

select TEMP.TESTSC() from SYSIBM.SYSDUMMY1; -- возвращаются правильные данные


CREATE OR REPLACE FUNCTION TEMP.TESTSB ()
  RETURNS INTEGER
BEGIN  
DECLARE STR_PER INTEGER;
SET STR_PER = (select MAX(ID_PERSON) from FORM.FUN where ID_PERSON_FUND_PARENT  <50);
RETURN STR_PER;
END;

select TEMP.TESTSB() from SYSIBM.SYSDUMMY1; -- Здесь выходит ошибка



Category Timestamp Duration Message Line Position
Error 21.03.2013 13:41:03 0:00:00.077 <link> - DB2 Database Error: ERROR [55047] [IBM][DB2/NT64] SQL20136N Routine "TEMP.TESTSB" (specific name "SQL130321134103934") attempted to access a federated object. 30 0

Что для этого нужно сделать, может какой то доступ дать?
Товарищи, выручайте советом - мне именно нужна 2-ая версия процедуры c Begin End (Atomic мне не подойдет...).
...
Рейтинг: 0 / 0
21.03.2013, 15:29
    #38193421
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Можно ещё попробовать засунуть курсор в конструкцию Begin atomic

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR REPLACE FUNCTION TEMP.TESTSC ()
  RETURNS INTEGER
BEGIN ATOMIC 
DECLARE STR_PER INTEGER;
DECLARE STR_EXEC VARCHAR(4000);
--SET STR_PER = (select MAX(ID_PERSON) from FORM.FUN where ID_PERSON_FUND_PARENT  <50);
SET STR_EXEC = (select MAX(ID_PERSON) from FORM.FUN where ID_PERSON_FUND_PARENT  <50);

PREPARE s1 FROM  STR_EXEC ; 
           OPEN c1;
           FETCH c1 INTO STR_PER;
           CLOSE c1;
RETURN STR_PER;
END;


Но так не компилится тоже, ошибки выдает.
Куда ни копаю, везде засада...
...
Рейтинг: 0 / 0
21.03.2013, 15:51
    #38193484
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
medoedмне именно нужна 2-ая версия процедуры c Begin End (Atomic мне не подойдет...).В процедурах это работает, в функциях с compiled sql - нет.
Inlined SQL functions and compiled SQL functions .
Вам нужен динамический sql в функции?
...
Рейтинг: 0 / 0
21.03.2013, 16:00
    #38193514
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Mark Barinsteinmedoedмне именно нужна 2-ая версия процедуры c Begin End (Atomic мне не подойдет...).В процедурах это работает, в функциях с compiled sql - нет.
Inlined SQL functions and compiled SQL functions .
Вам нужен динамический sql в функции?

Приветствую, Марк!
Да мне нужен отработать динамику в функции на строне сервера (без java или C), но так как там есть NickName в этой динамике.
То походу подойдет только begin atomic ... end . А в нем , что то я не могу откомпилить конструкцию Prepare.
...
Рейтинг: 0 / 0
21.03.2013, 17:48
    #38193754
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
medoedMark Barinsteinпропущено...
В процедурах это работает, в функциях с compiled sql - нет.
Inlined SQL functions and compiled SQL functions .
Вам нужен динамический sql в функции?

Приветствую, Марк!
Да мне нужен отработать динамику в функции на строне сервера (без java или C), но так как там есть NickName в этой динамике.
То походу подойдет только begin atomic ... end . А в нем , что то я не могу откомпилить конструкцию Prepare.

Все таки хотелось бы уточнить.
В скалярной функции возможно сделать динамический select из Nickname или это нерешаемая задача для DB2 9,7 , может кто знает?
...
Рейтинг: 0 / 0
22.03.2013, 11:17
    #38194440
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Походу нашел косяк в DB2 - знает кто то, как это устранить?

Вот что работает:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE OR REPLACE FUNCTION TEMP.TESTSG ()
  RETURNS VARCHAR(32000)
BEGIN ATOMIC 
DECLARE STR_RESULT VARCHAR(32000);
DECLARE STR_EXEC   VARCHAR(32000);
-- FORM.FUN - Никнэйм
 SET STR_RESULT = cast((select MAX(ID_PERSON)  from FORM.FUN where ID_PERSON_FUND_PARENT  <50) as varchar(100)) ;
RETURN cast(STR_RESULT as VARCHAR(32000));
END;
select TEMP.TESTSС() from SYSIBM.SYSDUMMY1; -- работает





-- Теперь делаем процедуру, для универсального выполнения динамики:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE OR REPLACE PROCEDURE TEMP.RETURN_STR
(IN IN_STR   VARCHAR(32000), 
 OUT OUT_STR VARCHAR(32000)
) 
LANGUAGE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
NO EXTERNAL ACTION
OLD SAVEPOINT LEVEL
READS SQL DATA
INHERIT SPECIAL REGISTERS
BEGIN
DECLARE c1 CURSOR FOR s1;
PREPARE s1 FROM IN_STR;
OPEN c1;
FETCH c1 INTO OUT_STR;
CLOSE c1;
RETURN;
END;



-- процедура работает
BEGIN
DECLARE STR_RESULT VARCHAR(32000);
DECLARE STR_EXEC VARCHAR(32000);
SET STR_EXEC = ' select MAX(ID_PERSON) from FORM.FUN where ID_PERSON_FUND_PARENT <50';
CALL TEMP.RETURN_STR (STR_EXEC,STR_RESULT);
insert into TEMP.DAT(DAT) values(STR_RESULT);
END
-- select * from TEMP.DAT

/*Теперь используем внутри функции процедуру и снова получаем ошибку*/

CREATE OR REPLACE FUNCTION TEMP.TESTSC ()
RETURNS INTEGER
CALLED ON NULL INPUT
BEGIN ATOMIC
DECLARE STR_RESULT VARCHAR(32000);
DECLARE STR_EXEC VARCHAR(32000);
CALL TEMP.RETURN_STR (STR_EXEC,STR_RESULT);
RETURN cast(STR_RESULT as VARCHAR(32000));
END;

-- выдает ошибку
select TEMP.TESTSС() from SYSIBM.SYSDUMMY1;

Lookup Error - DB2 Database Error: ERROR [55047] [IBM][DB2/NT64] SQL20136N Routine "TEMP.RETURN_STR" (specific name "SQL130322110434800") attempted to access a federated object.

Какая то нестыковка... Походу в функциях DB2 не поддерживается NickName в динамике ...
Есть какой то патч или неразрешимая проблема!?
Марк, вы не в курсе это как то поправимо или это баг?
...
Рейтинг: 0 / 0
22.03.2013, 15:41
    #38195046
mustaccio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
medoed,

Это не баг и не поправимо -- это ограничение, которое по каким-то причинам решили не снимать.

http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656] http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656
...
Рейтинг: 0 / 0
22.03.2013, 16:23
    #38195143
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
mustacciomedoed,

Это не баг и не поправимо -- это ограничение, которое по каким-то причинам решили не снимать.

http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656] http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656

Там пишут в описании:

This APAR adresses current restrictions for federated object
access within such nested paths. It will lift the restrictions
to allow read access on these federated objects.
Inserts, Update and Delete requests will continue to fail as
they could cause read/write conflicts in certain situations.


Я же делаю select из NickName - более того, он идет нормально к NickName в функции, траблов нет.
Более того динамические запросы к таблицам тоже идут нормально в функциях...
Но как только в функции использую NickName , а я его обернул в динамическом запросе - все хана - эта ошибка.

Мне кажется есть шанс на спасение, какой то доступ нужен к этому NickName, но Марк молчит как рыба и другие тоже...
...
Рейтинг: 0 / 0
22.03.2013, 16:44
    #38195179
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
mustacciomedoed,

Это не баг и не поправимо -- это ограничение, которое по каким-то причинам решили не снимать.

http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656] http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656

Взял тупо вынес все из функции и закинул в обычный Statesment - и о чудо оно работает, какого рожна в функции эта конструкция не работает. Какой доступ ей нужен, напиться чтоли с горя!

BEGIN
DECLARE STR_PER INTEGER;
DECLARE STR_EXEC VARCHAR(100);
DECLARE STR_RESULT VARCHAR(200);
DECLARE c1 CURSOR FOR s1;
SET STR_EXEC = ' select MAX(ID_PERSON) from FORM.FUN where ID_PERSON_FUND_PARENT <50';

PREPARE s1 FROM STR_EXEC;
OPEN c1;
FETCH c1 INTO STR_PER;
CLOSE c1;
END;
...
Рейтинг: 0 / 0
22.03.2013, 16:49
    #38195188
Динамический фомирование данных из табличной функции?
medoed,

В качестве обходного маневра, может функцию создать в той же системе где и таблица, а в этой системе создать маппинг этой функции CREATE FUNCTION MAPPING
Предложение теоретическое, практически не проверял.
...
Рейтинг: 0 / 0
22.03.2013, 16:59
    #38195210
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Евгений Хабаровmedoed,

В качестве обходного маневра, может функцию создать в той же системе где и таблица, а в этой системе создать маппинг этой функции CREATE FUNCTION MAPPING
Предложение теоретическое, практически не проверял.

Спасибо, за предложение, но...
А если у меня источник 1-н, а получателей много(10), мне на все системы её мапить?
К тому же ведь эта функция будет достаточно универсальной,
а это значит функция должна за счет динамики обрабатывать запросы как от NickName так и от обычных локальных таблиц...
...
Рейтинг: 0 / 0
22.03.2013, 17:59
    #38195335
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
medoed,

Уже было сказано:
используйте процедуры, а не функции, если надо работать с динамическими запросами к федеративным таблицам.
...
Рейтинг: 0 / 0
22.03.2013, 21:17
    #38195573
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
Mark Barinsteinmedoed,

Уже было сказано:
используйте процедуры, а не функции, если надо работать с динамическими запросами к федеративным таблицам.

В примере выше я как раз вызываю процедуру для динамического выполнения скрипта, правда из функции.
Но насколько мне известно в inline function db2 это не запрещено (вызов процедур).
Архитектура не позволяет мне использовать процедуру, так как я её в конструкцию from не оберну в последующем.
...
Рейтинг: 0 / 0
23.03.2013, 23:05
    #38196144
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический фомирование данных из табличной функции?
теперь я понимаю, почему на наших, не избалованных мэйнфреймами за откаты просторах, дб2 не рулит.
...
Рейтинг: 0 / 0
25.03.2013, 10:07
    #38196899
Динамический фомирование данных из табличной функции?
Ggg_oldтеперь я понимаю, почему на наших, не избалованных мэйнфреймами за откаты просторах, дб2 не рулит.

Каждая СУБД имеет свои особенности и ограничения.
Мне, например, непонятно почему в Оракле тип VARCHAR/VARCHAR2 ограничен 4000 байт.
Или почему Оракловый JDBC4-драйвер берет настройки языка/страны/территории из системы (JVM) и их невозможно поменять ни в свойствах соединения, ни иными способами. А с "неправильным" языком я не могу установить соединение с инстансом.
И как быть в случае, если нужно одновременно работать с инстансами с разными локалями?

Скоро буду тестировать некий софт в связке с MS SQL, подозреваю там будут свои "подводные камни".
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Динамический фомирование данных из табличной функции? / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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