简体   繁体   English

如何在 IN 子句中传递变量

[英]How to pass variable in IN clause

I declared the variable i_unit_attempt_status and I want to pass that variable in to 'In clause'.我声明了变量 i_unit_attempt_status 并且我想将该变量传递给“In 子句”。 How can I do that?我怎样才能做到这一点?

INNER JOIN student_unit_attempt sua
on sua.person_id=sei.person_id
   AND sua.course_cd=sei.course_cd
   AND sua.unit_cd=sei.unit_cd
   AND (sua.unit_attempt_status in (l_unit_attempt_status))

Data in the variable will be:变量中的数据将是:

Option 1:'COMPLETED','DISCONTIN','DUPLICATE','ENROLLED','INVALID','UNCONFIRM'
Option 2: 'ENROLLED'

See this answer.看到这个答案。

Use LIKE :使用LIKE

INNER JOIN student_unit_attempt sua
on sua.person_id=sei.person_id
   AND sua.course_cd=sei.course_cd
   AND sua.unit_cd=sei.unit_cd
   AND ','||l_unit_attempt_status||',' LIKE '%,'''||sua.unit_attempt_status||''',%'

Or pass in a collection:或者传入一个集合:

CREATE TYPE status_list IS TABLE OF varchar2(20);

DECLARE
  l_unit_attempt_status status_list := status_list( 'COMPLETED','DISCONTIN','DUPLICATE','ENROLLED','INVALID','UNCONFIRM' );
BEGIN
  SELECT <your_column_list>
  INTO   <variables>
  FROM   table_name sei
         INNER JOIN student_unit_attempt sua
         on sua.person_id=sei.person_id
            AND sua.course_cd=sei.course_cd
            AND sua.unit_cd=sei.unit_cd
            AND sua.unit_attempt_status MEMBER OF l_unit_attempt_status;
END;
/

Or split the list:或拆分列表:

INNER JOIN student_unit_attempt sua
on sua.person_id=sei.person_id
   AND sua.course_cd=sei.course_cd
   AND sua.unit_cd=sei.unit_cd
   AND sua.unit_attempt_status in ( SELECT COLUMN_VALUE
                                    FROM   XMLTABLE( l_unit_attempt_status ) )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM