在ORACLE的WHERE中传递多值

时间:2018-03-12 17:22:38

标签: oracle

我需要你帮助将多值传递给Oracle中的存储过程,

值是动态创建的。

基本上我是用简单的“字符串”从.NET发送值,Oracle将其作为varchar2接收:

存储过程

 create or replace procedure sp_text_in
     (text varchar2)
 AS
     CURSOR texts
     IS
         SELECT text FROM t_text where key_text in (text)
         ;
     BEGIN
         FOR reg IN texts LOOP
           dbms_output.put_line(reg.text);
     END LOOP;

 end sp_text_in;

示例:值可以是:

 select * from t_text where key_text in (197,198,196);

或只是一个值

 select * from t_text where key_text in (197);

1 个答案:

答案 0 :(得分:1)

理想选项是@anonyXmous共享的链接。另一个次优选项是使用动态SQL。但这可能允许SQL注入。下面的动态SQL解决方案。

create or replace procedure SP_TEXT_IN (TEXT varchar2)
as

  type TEXTSTABTYP is table of varchar2(1000);
  TEXTSTAB TEXTSTABTYP := TEXTSTABTYP();

begin

  execute immediate 'select TEXT from T_TEXT where KEY_TEXT in ('||TEXT||')'
  bulk collect into TEXTSTAB;

  for IDX in TEXTSTAB.first..TEXTSTAB.last 
  loop

    dbms_output.put_line(TEXTSTAB(IDX));

  end loop;

end sp_text_in;