![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Всем привет!
Возникла проблема с использованием запросов в TFDQuery. Когда имя таблицы содержит два символа '$', то TFDQuery не отображает список параметров в запросе. Вот пример (таблица vdata."wares$rules$link"). Если использовать макросы по подмене текста, то работает. Но не хочется такие элементарные вещи оборачивать через макросы. Код:
with tjWLL as (select
wrl.fldidxwarerule as fldidxwarerule,
json_agg(wll.*) as "WARESRULESLINKS"
from
vdata."wares$rules" wrl
inner join vdata."wares$rules$link" wll on (wrl.fldidxwarerule = wll.fldidxwarerule)
where
(wll.fldidxwarerule = any(:fldidxwarerule) or (case when :fldidxwarerule = '{}' then True else False end))
and :IsWLL
group by
wrl.fldidxwarerule
),
tjWRL as (select
wrl.*,
wll."WARESRULESLINKS"
from
vdata."wares$rules" wrl
left join tjWLL wll on (wrl.fldidxwarerule = wll.fldidxwarerule)
where
wrl.fldidxwarerule = any(:fldidxwarerule)
or case when :fldidxwarerule = '{}' then True else False end
)
select
json_build_object('WARESRULES', to_json(tjWRL)) as "WARESRULES"
from
tjWRLP.S. Переименовывать таблицы - уже поздно, живой проект. |
|
#2
|
|||
|
|||
|
Видимо, какая-то специфика парсинга запроса.
Варианты обхода: 1. Создать параметры "руками". 2. Создать вью, а уже из нее селектить с параметрами. |
|
#3
|
|||
|
|||
|
Цитата:
1. Даже при ручном создании - ругается 2. Ой как не люблю вьюшки, но наверное придется. Спасибо! P.S. Может кто-то еще предложит варианты ![]() |
|
#4
|
|||
|
|||
|
А проверь-ка на простом запросе, что такая реакция именно на 2 и более символов '$' в имени таблицы. А то есть еще подозрение, что тут скорее на использование одного и того же параметра несколько раз.
ЗЫ. Ну и сами запросы, как мне кажется, можно упростить. Для начала, можно избавиться от case'ов. Они, как мне кажется, просто не нужны. Код:
case when :value = '{}' then true else false endКод:
:value = '{}'Код:
any(:value) Если только ты не пихаешь в параметр запрос в текстовом виде, но такое тоже не должно работать. |