代码之家  ›  专栏  ›  技术社区  ›  Blurryface

处理基于动态的查询以删除选定结果

  •  0
  • Blurryface  · 技术社区  · 8 年前

    删除基于动态查询的报告生成的结果时遇到问题。

    现在我需要提出一个过程,删除通过经典报告生成的所有结果。请注意,所有页面项目都是可选的,这使得它有点复杂,至少对我来说是这样。

    以下是我用来生成经典报告的内容:

    declare
    q varchar2(4000):=NULL;
    begin
    q:='
    SELECT * FROM test WHERE col1 IS NOT NULL AND ';
    
    IF :P001_name IS NOT NULL THEN
    q:=q||' name= :P001_name AND ';
    END IF;
    
    IF :P001_order_date IS NOT NULL THEN
    q:=q||'order_date = :P001_order_date AND ';
    END IF;
    return q;
    END;
    

    欢迎任何替代方法/建议。这个想法是深入到一些选定的记录,并在审查后删除它们。

    我正在使用oracle apex 5.0.4。和Oracle 12C db

    1 回复  |  直到 8 年前
        1
  •  1
  •   Tony Andrews    8 年前

    您的进程将需要绑定页面项的所有绑定变量。如前所述,查询中绑定变量的数量不同,这意味着您需要使用 DBMS_SQL

    declare
      q varchar2(4000):=NULL;
    begin
      q:='DELETE FROM test WHERE col1 IS NOT NULL ';
    
      IF :P001_name IS NOT NULL THEN
        q:=q||' AND name= :P001_name ';
      ELSE 
        q:=q||' AND :P001_name is null ';
      END IF;
    
      IF :P001_order_date IS NOT NULL THEN
        q:=q||' AND order_date = :P001_order_date';
      ELSE 
        q:=q||' AND :P001_order_date is null';
      END IF;
    
      execute immediate q 
        using :P001_name, :P001_order_date;
    END;