Doom Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 Думаю наш вариант максимум будет маньяком, если все достанут [emoji1] Ага , в сериале "загадки ольгинского леса" ))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Doom Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 твин пикс Кто в роли лоры палмер? она ваша мадам - не сромничайте))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Organza Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 Ага , в сериале "загадки ольгинского леса" )))Или "Операция "Лесополоса Ольгино" "[emoji1] Ссылка на комментарий Поделиться на другие сайты Поделиться
Doom Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 я не блондинка-раз мне уже 18+ "а девочка созрела" Или "Операция "Лесополоса Ольгино" "[emoji1] первые 30 серий мочут неувиновных узбекотаджиков)))) Ссылка на комментарий Поделиться на другие сайты Поделиться
furer Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 На чужую пиццу и чужой боулинг? :D За все мной уплачено, так что правообладатель я! На Катрин денег не жалко и хрен с ней с Москвой! Ссылка на комментарий Поделиться на другие сайты Поделиться
Doom Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 За все мной уплачено, так что правообладатель я! На Катрин денег не жалко и хрен с ней с Москвой! у тебя случаем на КЛС аккаунта нет? явно оживил бы форум Ссылка на комментарий Поделиться на другие сайты Поделиться
furer Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 хорош нам тут вирусы на форум постить :angry: Это был разогрев- вот повкуснее (динамический разворот столбца в строку для DB2): CREATE OR REPLACE FUNCTION TOOL.JOIN ( STR_FROM VARCHAR(32000), SIMB VARCHAR(100) ) RETURNS VARCHAR(32000) BEGIN DECLARE STR_EXEC VARCHAR(32000); DECLARE STR_RESULT VARCHAR(32000); DECLARE SQLSTATE CHAR(5); DECLARE WITH_STR INTEGER ; DECLARE POS_SELECT INTEGER; DECLARE c1 CURSOR FOR s1 ; -- курсор -- получаем итоговый запрос динамически -- есть ли with SET WITH_STR = case when locate(UPPER('with'),UPPER(STR_FROM)) >0 THEN 1 else 0 end ; IF(WITH_STR = 0) THEN -- with нет в динамической конструкции set STR_EXEC = 'with ttt(COL1) as (' || STR_FROM || ' ) ' || ' select ' || ' listagg( ' || 'CAST(COL1 as VARCHAR(32000)) ,' || '''' || SIMB || '''' || ') from ttt '; ELSE -- опредилим последнее вхождение select или tceles наоборот set POS_SELECT = length(STR_FROM, CODEUNITS16) - locate(UPPER('tceles'),TOOLS.REVERSE(UPPER(STR_FROM))) - 6 ; -- with есть в динамической конструкции set STR_EXEC = SUBSTRING(STR_FROM,1,POS_SELECT,CODEUNITS16) || ', ttt(COL1) as ( ' || SUBSTRING(STR_FROM,POS_SELECT + 1 , locate(UPPER('tceles'),TOOLS.REVERSE(UPPER(STR_FROM))) + 6, CODEUNITS16) || ' )' || ' select ' || ' listagg( ' || 'CAST(COL1 as VARCHAR(32000)) , ' || '''' || SIMB || '''' || ') from ttt '; END IF; -- выполняем в динамике (можно тлько в скалярных функциях) PREPARE s1 FROM STR_EXEC ; OPEN c1; WHILE SQLSTATE = '00000' DO FETCH c1 INTO STR_RESULT; END WHILE; CLOSE c1; -- возвращаем строку с данными RETURN cast(STR_RESULT as VARCHAR(32000)); END; Ссылка на комментарий Поделиться на другие сайты Поделиться
Organza Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 [quote name="Дум Думыч" post="1117084" первые 30 серий мочут неувиновных узбекотаджиков)))) А потом местных жителей? ))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Doom Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 Это был разогрев- вот повкуснее (динамический разворот столбца в строку для DB2): CREATE OR REPLACE FUNCTION TOOL.JOIN ( STR_FROM VARCHAR(32000), SIMB VARCHAR(100) ) RETURNS VARCHAR(32000) BEGIN DECLARE STR_EXEC VARCHAR(32000); DECLARE STR_RESULT VARCHAR(32000); DECLARE SQLSTATE CHAR(5); DECLARE WITH_STR INTEGER ; DECLARE POS_SELECT INTEGER; DECLARE c1 CURSOR FOR s1 ; -- курсор -- получаем итоговый запрос динамически -- есть ли with SET WITH_STR = case when locate(UPPER('with'),UPPER(STR_FROM)) >0 THEN 1 else 0 end ; IF(WITH_STR = 0) THEN -- with нет в динамической конструкции set STR_EXEC = 'with ttt(COL1) as (' || STR_FROM || ' ) ' || ' select ' || ' listagg( ' || 'CAST(COL1 as VARCHAR(32000)) ,' || '''' || SIMB || '''' || ') from ttt '; ELSE -- опредилим последнее вхождение select или tceles наоборот set POS_SELECT = length(STR_FROM, CODEUNITS16) - locate(UPPER('tceles'),TOOLS.REVERSE(UPPER(STR_FROM))) - 6 ; -- with есть в динамической конструкции set STR_EXEC = SUBSTRING(STR_FROM,1,POS_SELECT,CODEUNITS16) || ', ttt(COL1) as ( ' || SUBSTRING(STR_FROM,POS_SELECT + 1 , locate(UPPER('tceles'),TOOLS.REVERSE(UPPER(STR_FROM))) + 6, CODEUNITS16) || ' )' || ' select ' || ' listagg( ' || 'CAST(COL1 as VARCHAR(32000)) , ' || '''' || SIMB || '''' || ') from ttt '; END IF; -- выполняем в динамике (можно тлько в скалярных функциях) PREPARE s1 FROM STR_EXEC ; OPEN c1; WHILE SQLSTATE = '00000' DO FETCH c1 INTO STR_RESULT; END WHILE; CLOSE c1; -- возвращаем строку с данными RETURN cast(STR_RESULT as VARCHAR(32000)); END; круто - МОЗХ!!!!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Organza Опубликовано 20 февраля, 2015 Поделиться Опубликовано 20 февраля, 2015 Андрэ сокращай писульки лень прокручивать Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.