在下面的查询中 j.table_name 是父表,它包含一些依赖表
1 STORE_ORDER_JSON_DATA
2 ECOMM_SHIPDOCS_MQ_DATA
我动态传递父表名称,依赖表名称已直接给出。
但是我想子站点依赖表名称及其列,即 在where条件中使用(js.data_Load_id,js.status,js.date_loaded也需要动态传递),因为依赖表每次都会根据父表发生变化。 我们怎样才能做到这一点?现在我直接在 exits 子句中给出了依赖表及其列。
V_SQL := 'DELETE FROM ' || j.table_name || ' ord ' ||---------------main 1
' WHERE ' || j.purge_condition_1 || ' = ''' || j.purge_indicator_1 || '''' ||
' AND trunc(' || j.purge_date || ') <= trunc(sysdate) - ' || j.threshold_days ||
' AND EXISTS (SELECT 1 FROM STORE_ORDER_JSON_DATA js ' ||--
' WHERE js.data_Load_id = ord.data_load_id ' ||
' AND js.status = ''P'' ' ||
' AND trunc(js.date_loaded) <= trunc(sysdate) - 10) ' ||
' AND EXISTS (SELECT 1 FROM ECOMM_SHIPDOCS_MQ_DATA mq ' ||--
' WHERE mq.data_Load_id = ord.data_load_id ' ||
' AND mq.status = ''P'' ' ||
' AND trunc(mq.date_loaded) <= trunc(sysdate) - 10)';
...因为依赖表每次都会根据父表进行更改。
我讨厌这么说,但是 - 动态 SQL 是邪恶。你真的需要它吗?为什么?你不能通过创建例如来实现目标吗
如果没有,则考虑创建额外的
表,其中将包含成对的主从表和要连接的列
id master detail mcol1 dcol1 mcol2 dcol2
-- ------ ------ ------ ------ -------- ----------
1 dept emp deptno deptno
2 emp bonus empno empno hiredate bonus_date
然后根据 ID 查询该表来编写动态 SQL,这样您就知道必须连接哪些列。如有必要,可使用另一对 mcol(主列)和 dcol(详细列)对其进行扩展。或者,如果您认为这是一个更好的选择,请对其进行规范化,以便以前的表仅包含 ID、主表和明细表,而其 detal 表包含成对的列:
id mcol dcol
-- -------- ----------
1 deptno deptno
2 empno empno
2 hiredate bonus_date
其他人可能有另一个不同的、更好的想法,所以 - 等待他们的意见。