powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблеме с кавычками
9 сообщений из 9, страница 1 из 1
Проблеме с кавычками
    #34311223
Don VinNi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема с кавычками
Хочу сделать запрос типа:

select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a='ЭК' and g54d between prev and cur group by char(g33a,4))

Делаю следующие действия

set vr_EX='ЭК';
set SQL_CMD='select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a=' || vr_EX || ' and g54d between prev and cur group by char(g33a,4))';
execute immediate SQL_CMD;

Что можно сделать что бы передать переменную вместе с кавычками
...
Рейтинг: 0 / 0
Проблеме с кавычками
    #34311572
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
set vr_EX='ЭК';
set SQL_CMD='select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a=''' || vr_EX || ''' and g54d between prev and cur group by char(g33a,4))';
...
Рейтинг: 0 / 0
Проблеме с кавычками
    #34312384
Don VinNi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinsteinset vr_EX='ЭК';
set SQL_CMD='select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a=''' || vr_EX || ''' and g54d between prev and cur group by char(g33a,4))';

Спасибо за помощь работает нормально, но уменя еще одна мальенкая проблема не касающийся темы

Eсть уменя процедура

create procedure temp_cur(in prev date, cur date)
........
-------
set SQL_CMD='select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a='ЭК' and g54d between ' || varchar(date( prev )) || ' and ' || varchar(date( cur )) || ' group by char(g33a,4))';
execute immediate SQL_CMD;
-------
........

когда вызываю процедуру и в качестве in параметров передаю дату возникает проблема. Т.Е:

db2 => call temp_cur( '2006-01-01' , '2006-12-31' )

SQL0104N Обнаружен неправильный элемент ".2006" после текста "d g54d between 01.01". Список правильных элементов: "<space>". SQLSTATE=42601
...
Рейтинг: 0 / 0
Проблеме с кавычками
    #34312470
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Don VinNiset SQL_CMD='select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a='ЭК' and g54d between ' || varchar(date(prev)) || ' and ' || varchar(date(cur)) || ' group by char(g33a,4))';
set SQL_CMD='select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a='ЭК' and g54d between ''' || char(prev, iso) || ''' and ''' || char(cur, iso) || ''' group by char(g33a,4))';
...
Рейтинг: 0 / 0
Проблеме с кавычками
    #34312474
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс, недосмотрел...

set SQL_CMD='select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a=''ЭК'' and g54d between ''' || char(prev, iso) || ''' and ''' || char(cur, iso) || ''' group by char(g33a,4))';
...
Рейтинг: 0 / 0
Проблеме с кавычками
    #34314543
Don VinNi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinУпс, недосмотрел...

set SQL_CMD='select count(distinct char(g33a,4)) from table1 where char(g33a,4)=any(select char(g33a,4) from table1 where g01a=''ЭК'' and g54d between ''' || char(prev, iso) || ''' and ''' || char(cur, iso) || ''' group by char(g33a,4))';

Решаю одну проблему возникает вторая :)

Сделал все так как сказали, проблем нет. Но Я также использую оператор execute immediate для SQL_CMD Ругается на то что нельзя использавать select statemant

В доке прочел что нельзя использовать select statemant когда используешь execute или execute immediate . Че можете посоветовать для того чтобы в теле процедуры после выполнение, динамически подготовленного , запроса присвоить результат в переменную.
...
Рейтинг: 0 / 0
Проблеме с кавычками
    #34315045
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare cnt int;
declare c1 cursor for s1;
...
set SQL_CMD=
  'select count(distinct char(g33a,4)) '
||'from table1 '
||'where char(g33a,4)=any('
||'select char(g33a,4) '
||'from table1 '
||'where g01a=''ЭК'' and g54d between ''' || char(prev, iso) || ''' and ''' || char(cur, iso) 
||''' group by char(g33a,4)'
||')';
prepare s1 from SQL_CMD;
OPEN c1;
FETCH c1 INTO cnt;
CLOSE c1;
P.S.: Запрос какой-то странный, ИМХО...
...
Рейтинг: 0 / 0
Проблеме с кавычками
    #34316215
Don VinNi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare cnt int;
declare c1 cursor for s1;
...
set SQL_CMD=
  'select count(distinct char(g33a,4)) '
||'from table1 '
||'where char(g33a,4)=any('
||'select char(g33a,4) '
||'from table1 '
||'where g01a=''ЭК'' and g54d between ''' || char(prev, iso) || ''' and ''' || char(cur, iso) 
||''' group by char(g33a,4)'
||')';
prepare s1 from SQL_CMD;
OPEN c1;
FETCH c1 INTO cnt;
CLOSE c1;
P.S.: Запрос какой-то странный, ИМХО...

:) :) :) Извеняюсь за наглость но у меня еще полследний вопрос на этот же тему. Как мене сделать следующий запрос.
insert into temp_cur( g33a, s15_17, g41, g31b, g46, g54d)(select g33a, s15_17, g41, g31b, g46, g54d from t_st2006 where char(g33a, 4)=vr_g33a and g54d between '2006-01-01' and '2006-12-31' and g01a='ЭК');

В теле процедуры пишу так:
set vr_year_var='t_st'||substr(varchar(cur),7,4);
set SQL_CMD_exec=' insert into temp_cur( g33a, s15_17, g41, g31b, g46, g54d)(select g33a, s15_17, g41, g31b, g46, g54d from ' || vr_year_var || ' where char(g33a, 4)=vr_g33a g01a='''|| vr_EX || ''' and g54d between ''' || char(prev, iso) || ''' and ''' || char(cur, iso) || '''' ;
execute immediate SQL_CMD_exec;

компелируется процедура без проблем. Но когда вызываешь ее, она ругается:(

SQL0084N Оператор EXECUTE IMMEDIATE содержит оператор SELECT или VALUES.
SQLSTATE=42612

Как или что использовать чтобы получить требуемый результат
...
Рейтинг: 0 / 0
Проблеме с кавычками
    #34316356
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
set vr_year_var='t_st'||substr(varchar(cur),7,4);
set vr_g33a = ...;
set SQL_CMD_exec=
'insert into temp_cur( g33a, s15_17, g41, g31b, g46, g54d) '
||'select g33a, s15_17, g41, g31b, g46, g54d from ' || vr_year_var
|| ' where char(g33a, 4)= '''||vr_g33a||''' and g01a='''|| vr_EX
|| ''' and g54d between ''' || char(prev, iso) || ''' and ''' || char(cur, iso) || '''' ;
execute immediate SQL_CMD_exec;
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проблеме с кавычками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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