我需要你帮助将多值传递给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);
答案 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;