我无法删除基于动态查询的报告生成的结果。
我有一个静态区域,我已经定义了用于过滤/搜索的所有页面项目。在提交值之后,类型为" PL / SQL函数体返回SQL查询的经典报告"生成与页面项值匹配。
现在我需要提出一个流程来删除通过经典报告生成的所有结果。请注意,所有页面项都是可选的,这使得它有点复杂,至少对我而言。
以下是我用来生成经典报告的内容:
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;
我尝试使用上面查询中使用的相同where子句进行删除,但没有帮助。
欢迎任何替代方法/建议。我们的想法是深入查看一些选定的记录,并在审核后将其删除。
我正在使用oracle apex 5.0.4。和Oracle 12C db
答案 0 :(得分:1)
您的进程需要绑定页面项的所有绑定变量。如上所述,查询中绑定变量的数量会有所不同,这意味着您需要使用DBMS_SQL
包。但是,您可以调整它以便修复绑定变量的数量,然后您可以使用execute immediate:
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;