Передача нескольких переменных в PLSQL - PullRequest
0 голосов
/ 02 марта 2020

В настоящее время я использую

WHERE m.TCompany in ('&TCompany')

Я ввожу код, подобный (C001), и получаю эти результаты. Но когда я ввожу (C001,C002), я не получаю результатов.

Что мне не хватает? Как получить несколько результатов для введенных параметров?

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

В качестве альтернативы, может быть, несколько проще:

SQL> select deptno, ename, job, sal
  2  from emp e join table(sys.odcivarchar2list(&jobs_list)) j
  3               on j.column_value = e.job;
Enter value for jobs_list: 'CLERK', 'MANAGER'
old   2: from emp e join table(sys.odcivarchar2list(&jobs_list)) j
new   2: from emp e join table(sys.odcivarchar2list('CLERK', 'MANAGER')) j

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        20 SMITH      CLERK            800
        20 JONES      MANAGER         2975
        30 BLAKE      MANAGER         2850
        10 CLARK      MANAGER         2450
        20 ADAMS      CLERK           1100
        30 JAMES      CLERK            950
        10 MILLER     CLERK           1300

7 rows selected.

SQL>
0 голосов
/ 02 марта 2020

Вы отправляете Oracle одну строку, которую вы sh будете использовать в качестве нескольких значений. Поскольку Oracle не имеет никакого способа узнать это, вы должны настроить его. Это означает, что вы должны отделить строку. Это не так сложно.

-- parse string demo
with parm as 
    (select '&par_value' pv from dual)
   , col_list as   
     ( select regexp_substr(pv,'[^,]+', 1, level) val from parm
       connect by regexp_substr(pv, '[^,]+', 1, level) is not null
     )
Select * from col_list; 

Теперь для вашего конкретного случая используйте те же функции синтаксического анализа, но вставьте их в условие where.

with parm as 
    (select '&par_value' pv from dual)
   , col_list as   
     ( select regexp_substr(pv,'[^,]+', 1, level) val from parm
       connect by regexp_substr(pv, '[^,]+', 1, level) is not null
     )
Select 
   <your select> 
where 
WHERE m.TCompany in (select val from col_list);
...