Oracle PL / SQL-запрос с динамическими параметрами в предложении Where - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь написать динамический запрос, который может иметь различное количество параметров другого типа.Единственная проблема, с которой я сталкиваюсь, - это обработка, если значение является строкой, поэтому вокруг него нужны одинарные кавычки.Я использую значение поля с именем key_ref_, чтобы определить, как будет выглядеть мое предложение where.Вот некоторые примеры:

LINE_NO=1^ORDER_NO=P6002277^RECEIPT_NO=1^RELEASE_NO=1^

PART_NO=221091^PART_REV=R02^

На данный момент я заменяю '^' на 'и' вот так:

REPLACE( key_ref_, '^' ,' and ' );

Затем я пытаюсь создать динамический запрос, напримерthis:

EXECUTE IMMEDIATE
'select '||column_name_||' into column_ from '||base_table_||' where '||
 key_ref_ || 'rownum = 1';

Это не будет работать в случаях, когда значение не является числом.

Также я добавил «rownum = 1» только для обработки дополнительных «и» вконец вместо удаления последнего вхождения.

1 Ответ

0 голосов
/ 19 октября 2018

Если на входе не будет символа тильда (~), вы можете попробовать приведенный ниже код.если вход имеет тильд, вы можете заменить его другим значением, которого не должно быть на входе

, учитывая входные данные, приведенные в примере.

LINE_NO=1^ORDER_NO=P6002277^RECEIPT_NO=1^RELEASE_NO=1^PART_NO=221091^PART_REV=R02^

используйте приведенный ниже код

replace(replace(replace('LINE_NO=1^ORDER_NO=P6002277^RECEIPT_NO=1^RELEASE_NO=1^PART_NO=221091^PART_REV=R02^','^','~ and '),'=','=~'),'~',q'[']')

и в результате будет

LINE_NO='1' and ORDER_NO='P6002277' and RECEIPT_NO='1' and RELEASE_NO='1' and PART_NO='221091' and PART_REV='R02' and 

Система напечатает числовые поля так, что никаких проблем не будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...