Oracle
 sql >> база данни >  >> RDS >> Oracle

Заявка с IN параметри, разделени със запетая в PLSQL

SELECT * FROM Table1 WHERE   
Table1.PRODUCT LIKE ( select regexp_substr(I_PRODUCT,'[^,]+', 1, level) from dual
                     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null);

ХАРЕСВАНЕ операторът ще се провали в горната заявка. Трябва да използватеIN , което вътрешно ще бъде оценено като множествено ИЛИ .

Table1.PRODUCT IN ( select regexp_substr(I_PRODUCT,'[^,]+', 1, level) from dual
                     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null);

Също така относно вариращ IN списък , погледнете моя отговор тук .

Актуализация

Въз основа на коментарите на OP.

Променете заявката като:

WITH str_search AS
(
     select regexp_substr(I_PRODUCT,'[^,]+', 1, level) pattern from dual
     connect by regexp_substr(I_PRODUCT, '[^,]+', 1, level) is not null
)
SELECT   *
FROM     Table1
WHERE     EXISTS (
          SELECT     NULL
          FROM     str_search
          WHERE     tab.col     LIKE pattern
                 );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01775:циклична верига от синоними, но няма синоними

  2. DotConnect на DevArt за Oracle срещу ADO.NET доставчик на данни на DataDirect

  3. oracle 11g и интеграция на hibernate spring и jsf

  4. SQL заявка с CASE и групиране по

  5. Свързваща променлива към името на таблицата с cx_Oracle