使用with解决传入入参可变的问题
多入参问题在选择入参时,入参数量可变,一般是通过动态SQL拼写where语句实现,这种方式即不安全,可读性又差,我们可以借助Oracle 的with语句和table函数来实现可变入参的功能。
-- Created on 2008-03-19 by ADMINISTRATOR
declare -- Local variables here i integer; v_tab insu_table; begin select '31' bulk collect into v_tab from dual; p1(v_tab); end; |
create or replace type insu_table is table of varchar2(3);
CREATE OR REPLACE PROCEDURE p1(p_tab insu_table) IS v_a VARCHAR2(20); BEGIN WITH data AS( SELECT * FROM TABLE(p_tab)) SELECT aab001 INTO v_a FROM ab15 WHERE aae140 IN (SELECT * FROM data) AND rownum = 1; END; |
通过with语句,将险种虚拟为数据集,在select中作为表访问即可。