Использование одинарной кавычки в EXECUTE STATEMENT

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
greg123
Сообщения: 2
Зарегистрирован: 28 фев 2008, 20:17

Использование одинарной кавычки в EXECUTE STATEMENT

Сообщение greg123 » 28 фев 2008, 20:36

У меня есть такая процедура:

Код: Выделить всё

CREATE OR ALTER PROCEDURE PR_LPU (
    ns varchar(15) character set win1251)
as
declare variable sqlstr varchar(600) character set win1251;
declare variable tek_gk integer;
begin

 for select distinct l.n_gk from l where l.ns=:ns into tek_gk
 do begin
     SQLSTR = 'update l set l.err_code=l.err_code||1 '||
             ' where l.n_gk='||:tek_gk||' and l.err_code like '1%' and'||
             ' exists '||
             '(select h.c from history h where h.c=l.c and'||
             ' h.gk'||:tek_gk||'=1 and h.date_beg<=l.date_vr and '||
             ' h.date_end>=l.date_vr)'||
             ' and l.ns='||:ns||';';    
     EXECUTE STATEMENT :SQLSTR;
 end
end
Но условие " and l.err_code like '1%' " не работает, пробовал и like ''1%'' и вовсе без кавычек. То есть проблема как указать символ одинарной кавычки. Или возможна реализация данного запроса без использования EXECUTE STATEMENT?

Заранее спасибо.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 28 фев 2008, 21:00

Проблемы с проектированием БД.
Если поле нужно доставать по его номеру - явно что-то не так.

Сколько возможных значений принимает tek_gk? Если значений мало, то можно и в такой жуткой структуре извернуться одним апдейтом.

greg123
Сообщения: 2
Зарегистрирован: 28 фев 2008, 20:17

Сообщение greg123 » 28 фев 2008, 21:17

Значения tek_gk от 0 до 3.

Если просто апдейтами, то у меня получилось черыре однотипных запроса.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 29 фев 2008, 10:52

И чего? Какая разница, в цикле ты построишь эти четыре апдейта, или руками напишешь?
Применять к месту и не к месту ES - плохо. Как для задачи, так и для твоего развития.

Hint: Применяя оператор CASE можно всё в 1 апдейт уместить.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Re: Использование одинарной кавычки в EXECUTE STATEMENT

Сообщение Kotъ-Begemotъ » 03 мар 2008, 21:45

А само

Код: Выделить всё

select distinct l.n_gk from l where l.ns=:ns into tek_gk 
работает? В том же IBExpert ?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Использование одинарной кавычки в EXECUTE STATEMENT

Сообщение WildSery » 04 мар 2008, 11:30

Kotъ-Begemotъ писал(а):работает? В том же IBExpert ?
А что мешает? К названию таблицы можно обращаться как к алиасу, если ты не переобъявлял.
Или ты о чём?

Ответить