【问题标题】:Selection of columns in stored procedure based on parameters根据参数选择存储过程中的列
【发布时间】:2013-02-03 17:21:00
【问题描述】:

我需要检查存储过程中的参数,如果输入了,我需要选择它

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'

请建议我如何做到这一点。

【问题讨论】:

  • 你试过什么?你得到了什么错误?看来你已经有了答案,只需要用正确的 plsql 语法写出来……
  • 是的。我不知道怎么写代码

标签: sql oracle dynamic plsql plsqldeveloper


【解决方案1】:

您可以声明一个变量,保存列名,然后连接到 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    相关资源
    最近更新 更多