|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
Друзья, подскажите как корректно экранировать входящий параметр в динамический sql хранимки? В моем случае это переменная: :P_COMMENT Получилось победить только таким образом: авторSQL_STR = 'SELECT ID,' || ' BDATE,' || ' EDATE,' || ' COMMENT' || ' FROM ERRANDS' || ' WHERE ((PKB_UTILS.ISNULL(:P_COMMENT)) OR (NOT PKB_UTILS.ISNULL(:P_COMMENT) AND LOWER(COMMENT) LIKE LOWER(''%'|| :P_COMMENT ||'%'')))' || ' AND BDATE >= :P_BDATE AND EDATE <= :P_EDATE'; FOR EXECUTE STATEMENT (SQL_STR) (P_COMMENT := P_COMMENT, P_BDATE := P_BDATE, P_EDATE := P_EDATE) INTO :ID, :BDATE, :EDATE, :COMMENT DO SUSPEND; ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:23 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
scorpion235, смотри C:\Program Files\Firebird\Firebird_3_0\doc\sql.extensions\README.alternate_string_quoting.txt ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 00:46 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
scorpion235, Если это не пример то EXECUTE STATEMENT возможно лишний ибо Код: sql 1.
почти всегда стр.69 эквивалентен Код: sql 1.
и тогда получается Код: sql 1. 2. 3. 4. 5.
что как по мне гораздо проще для восприятия ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 06:30 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
m7m, Да, работает с CONTAINING. Никакое экранирование не нужно. Благодарю! авторLIKE LOWER(''%'|| :P_COMMENT ||'%'') заменил на авторCONTAINING LOWER(:P_COMMENT) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 10:52 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
scorpion235, LOWER тоже убери, CONTAINING ищет без учёта регистра. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 11:01 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
Ну, еще можно было '%' присоединить к значению параметра: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 14:11 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
Polesov, А если параметр используется ещё где-то, то нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 16:51 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
WildSery А если параметр используется ещё где-то, то нельзя. Это да. По любому, надо смотреть в каждом конкретном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2021, 18:09 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
WildSery, единственное, при поиске через LIKE можно было в середине текста поиска добавить % (поиск: текст%текст), здесь %воспринимается как любое количество любых символов если использовать CONTAINING, то % уже воспринимается просто как символом в строке ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2021, 10:29 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
scorpion235, Если речь о возможностях, то открой для себя регулярные выражения ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 10:01 |
|
Экранирование в динамическом sql
|
|||
---|---|---|---|
#18+
scorpion235, а README.alternate_string_quoting.txt ты смотрел? Как по мне это самый удобный способ, который позволяет без труда внутри строки вставить текстовый литерал. И ещё не к чему делать конкатенацию там где она не требуется. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 10:24 |
|
|
start [/forum/topic.php?fid=40&fpage=7&tid=1560055]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
294ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 407ms |
0 / 0 |