基于参数选择存储过程中的列

时间:2013-02-19 05:32:15

标签: sql oracle dynamic plsql plsqldeveloper

我需要检查存储过程中的参数(如果已输入),然后我需要选择

i=j=k=l=m=1;
IF (p_plant_cd IS NULL) THEN
   i=0;
END IF;
IF(p_global_duns_nbr IS NULL) THEN
   j=0
END IF;
IF(p_global_duns_nbr IS NULL) THEN
   k=0
END IF;
IF(p_matrl_grp IS NULL) THEN 
   l=0
END IF;
IF (p_mrp IS NULL) THEN
   m=0
END IF ;

哪个值为1我需要在变量v_select

中添加相应的参数

例如;

if k and l are 1 then 
v_select='p_global_duns_nbr,p_matrl_grp'

请告诉我如何做到这一点。

1 个答案:

答案 0 :(得分:2)

您可以声明一个变量,保存列名,然后连接到select语句,并在v_select中使用SQL select语句,根据需要使用它

declare
    v_columns varchar2(255);
    v_select varchar2(2000);
    v_result sys_refcursor;
begin

    v_columns := 'rownum';

    IF p_plant_cd = 1 THEN
       v_columns := v_columns || ',p_plant_cd';
    END IF;

    IF p_global_duns_nbr = 1 THEN
       v_columns := v_columns || ',p_global_duns_nbr';
    END IF;

    IF p_global_duns_nbr = 1 THEN
       v_columns := v_columns || ',p_global_duns_nbr';
    END IF;

        IF p_matrl_grp = 1 THEN
       v_columns := v_columns || ',p_matrl_grp';
    END IF;

    IF p_mrp = 1 THEN
       v_columns := v_columns || ',p_mrp';
    END IF; 



    v_select := 'SELECT ' || v_columns || ' FROM table';

    open v_result for v_select;




end;