Как получить результаты из нескольких значений с переменными Oracle Sql? - PullRequest
0 голосов
/ 26 декабря 2018

Я использую формы оракула 10g с системой ERP.У меня есть форма, в которой пользователь может выбрать несколько списков значений.Как это

https://imgur.com/5Kt0eC6

У меня есть запрос sql, когда пользователь вводит только одно значение, тогда он дает результат, но когда пользователь вводит несколько значений, тогда отображаются пустые записи

select * from table 
where column IN (rtrim(Replace(Replace(:variable, ')'), '('),','));

В значениях формы выберите в этой форме

(0210110002),(0270100005),

DataType of column (VARCHAR2)

1 Ответ

0 голосов
/ 26 декабря 2018

Это проблема с различными элементами в списке IN;Вы не можете использовать эти значения в переменной , например (в виде строки) - вам придется разбить их на строки.

Вот пример:

SQL> select regexp_substr(x.rt_col, '[^,]+', 1, level) val
  2  from (select rtrim(replace(replace('&&variable', '(', ''), ')', ''), ',') rt_col
  3        from dual
  4       ) x
  5  connect by level <= regexp_count('&&variable', ',');
Enter value for variable: (0210110002),(0270100005),
old   2: from (select rtrim(replace(replace('&&variable', '(', ''), ')', ''), ',') rt_col
new   2: from (select rtrim(replace(replace('(0210110002),(0270100005),', '(', ''), ')', ''), ',') rt_col
old   5: connect by level <= regexp_count('&&variable', ',')
new   5: connect by level <= regexp_count('(0210110002),(0270100005),', ',')

VAL
--------------------------------------------------------------------------------
0210110002
0270100005

SQL>
  • строка 2: удалить скобки и запятую
  • строка 1 + строка 5: иерархический запрос, который разбивает оставшуюся строку (0210110002,0270100005) в строки

Это означает, что ваш запрос будет выглядеть так:

select * from table 
where column in
  (select regexp_substr(x.rt_col, '[^,]+', 1, level) val
   from (select rtrim(replace(replace(:variable, '(', ''), ')', ''), ',') rt_col
         from dual
        ) x
   connect by level <= regexp_count(:variable, ',')
  );
...