Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Приветствую!

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

 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)!
18 фев 13, 13:54    [13942616]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Подскажите хотя бы это надо строго через вызов процедуры делать или же через cursor как то можно?
18 фев 13, 16:22    [13943817]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
medoed
P.S. Написание функции на java не предлагать, нужно на субд и именно функцию, чтобы потом её в запросах использовать (в конструкции from)!
Здравствуйте.

В db2 функции можно писать как на языке SQL, так и на внешних языках, например JAVA, C.
При этом SQL запросу, который использует эту функцию, всё равно, на каком языке написана эта функция.
В табличных функциях на языке SQL нельзя использовать динамический SQL.
На java такая функция легко может быть реализована.
19 фев 13, 10:33    [13946936]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Mark Barinstein
medoed
P.S. Написание функции на java не предлагать, нужно на субд и именно функцию, чтобы потом её в запросах использовать (в конструкции from)!
Здравствуйте.

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


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

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

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 нет!
19 фев 13, 11:29    [13947305]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Вообщем что то получилось, написал две функции:

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

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

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

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;


Может кто подскажет?
19 фев 13, 13:17    [13948066]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
medoed,

Можно через ж... массив попробовать :)
+ код
-- скалярная
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'))@

19 фев 13, 14:56    [13948906]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
medoed,
Упрощу вопрос. Есть одна функция:

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;


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


-- Обрубает строку до 644 символов, почему? Какие то ограничения на курсор?
19 фев 13, 14:57    [13948917]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Mark Barinstein
medoed,

Можно через ж... массив попробовать :)
+ код
-- скалярная
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'))@



Через Ж.. не хочу))
Ваш пост не видел, когда уточнение опубликовывал, помогите с обрубаловым строки и я Вам буду готов проставиться пивом ))
19 фев 13, 14:59    [13948941]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
medoed
...
Через Ж.. не хочу))
Ваш пост не видел, когда уточнение опубликовывал, помогите с обрубаловым строки


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

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

SELECT length(STR) FROM TABLE(GET_STR_T('SELECT listagg(colcount, '','') FROM SYSCAT.TABLES'))

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

1 record(s) selected.
19 фев 13, 16:04    [13949599]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Марк ещё раз спасибо.
Функция была верной и обрубалось из-за динамически не верной составленной строки в запросе - 0 -лик потерял. Научился динамику в функциях использовать))
19 фев 13, 17:08    [13950213]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Срочно нужна помощь, в скалярной в функции на боевой возникают траблы...
Обе функции работают c NickName (FORM.FUN):

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

Вот то что работает:
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 мне не подойдет...).
21 мар 13, 13:59    [14077212]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Можно ещё попробовать засунуть курсор в конструкцию Begin atomic

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;

Но так не компилится тоже, ошибки выдает.
Куда ни копаю, везде засада...
21 мар 13, 15:29    [14077820]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
medoed
мне именно нужна 2-ая версия процедуры c Begin End (Atomic мне не подойдет...).
В процедурах это работает, в функциях с compiled sql - нет.
Inlined SQL functions and compiled SQL functions.
Вам нужен динамический sql в функции?
21 мар 13, 15:51    [14078008]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Mark Barinstein
medoed
мне именно нужна 2-ая версия процедуры c Begin End (Atomic мне не подойдет...).
В процедурах это работает, в функциях с compiled sql - нет.
Inlined SQL functions and compiled SQL functions.
Вам нужен динамический sql в функции?


Приветствую, Марк!
Да мне нужен отработать динамику в функции на строне сервера (без java или C), но так как там есть NickName в этой динамике.
То походу подойдет только begin atomic ... end . А в нем , что то я не могу откомпилить конструкцию Prepare.
21 мар 13, 16:00    [14078082]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
medoed
Mark Barinstein
пропущено...
В процедурах это работает, в функциях с compiled sql - нет.
Inlined SQL functions and compiled SQL functions.
Вам нужен динамический sql в функции?


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


Все таки хотелось бы уточнить.
В скалярной функции возможно сделать динамический select из Nickname или это нерешаемая задача для DB2 9,7 , может кто знает?
21 мар 13, 17:48    [14078754]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Походу нашел косяк в DB2 - знает кто то, как это устранить?

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

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; -- работает




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

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 в динамике...
Есть какой то патч или неразрешимая проблема!?
Марк, вы не в курсе это как то поправимо или это баг?
22 мар 13, 11:17    [14080886]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
mustaccio
Member

Откуда: Москва -> Торонто
Сообщений: 494
medoed,

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

http://www-01.ibm.com/support/docview.wss?uid=swg1JR24656
22 мар 13, 15:41    [14083151]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
mustaccio
medoed,

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

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, но Марк молчит как рыба и другие тоже...
22 мар 13, 16:23    [14083473]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
mustaccio
medoed,

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

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;
22 мар 13, 16:44    [14083582]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
Евгений Хабаров
Member

Откуда: Москва
Сообщений: 773
medoed,

В качестве обходного маневра, может функцию создать в той же системе где и таблица, а в этой системе создать маппинг этой функции CREATE FUNCTION MAPPING
Предложение теоретическое, практически не проверял.
22 мар 13, 16:49    [14083603]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Евгений Хабаров
medoed,

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


Спасибо, за предложение, но...
А если у меня источник 1-н, а получателей много(10), мне на все системы её мапить?
К тому же ведь эта функция будет достаточно универсальной,
а это значит функция должна за счет динамики обрабатывать запросы как от NickName так и от обычных локальных таблиц...
22 мар 13, 16:59    [14083649]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
medoed,

Уже было сказано:
используйте процедуры, а не функции, если надо работать с динамическими запросами к федеративным таблицам.
22 мар 13, 17:59    [14083957]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
medoed
Member

Откуда:
Сообщений: 944
Mark Barinstein
medoed,

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


В примере выше я как раз вызываю процедуру для динамического выполнения скрипта, правда из функции.
Но насколько мне известно в inline function db2 это не запрещено (вызов процедур).
Архитектура не позволяет мне использовать процедуру, так как я её в конструкцию from не оберну в последующем.
22 мар 13, 21:17    [14084665]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
теперь я понимаю, почему на наших, не избалованных мэйнфреймами за откаты просторах, дб2 не рулит.
23 мар 13, 23:05    [14087324]     Ответить | Цитировать Сообщить модератору
 Re: Динамический фомирование данных из табличной функции?  [new]
Евгений Хабаров
Member

Откуда: Москва
Сообщений: 773
Ggg_old
теперь я понимаю, почему на наших, не избалованных мэйнфреймами за откаты просторах, дб2 не рулит.


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

Скоро буду тестировать некий софт в связке с MS SQL, подозреваю там будут свои "подводные камни".
25 мар 13, 10:07    [14090787]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить