截断整个 table 如果 TO_CHAR(SYSDATE,'DD')='01' in SQL

TRUNCATE whole table if TO_CHAR(SYSDATE,'DD')='01' in SQL

我在 table 中有大量记录(1.2m+ 条记录),其中相应的日常记录inserted/updated。

现在,我有一个新的业务需求。

要求如下,

IF CURRENT_DAY is 01, i.e., each and every 1st day of the month, the table will be TRUNCATED, if not, then the regular insert/update job will continue.

我从INFORMATICA ETL端解决了,逻辑如下,

SQ: SELECT * FROM SOME_TABLE WHERE 1=2

即没有任何源记录

SQ > EXP > NEW OUTPUT PORT > TO_CHAR(SYSDATE,'DD') - CURR_DAY

现在,

EXP > RTR > NEW GROUP > CURR_DAY = '01'

然后,

RTR > NEW GROUP > TGT > SESSION PROPERTIES > ENABLED TRUNCATE

这样,需求就满足了

但是,我想知道是否有任何其他方法可以仅使用 PURE PL/SQL 或 SQL?

请指导我。

您可以按如下方式使用PL/SQL

BEGIN
IF TRUNC(SYSDATE) = TRUNC(SYSDATE,'MON') THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE YOUR_TABLE';
END IF;
END;
/

使用 Decision Task 检查是否是一个月的第一天。如果是,运行 启用 truncate target table 选项的虚拟会话和 SQ 上的一些虚拟查询(如 select 1 from dual where 1=2。接下来,将其连接到您的常规数据加载会话。 将 Decision 连接到同样具有 False 条件的常规数据加载会话,如果不是一个月的第一天,则直接使其成为 运行。

Start --> Decision (is 1st?) ---yes---> s_trunc
                            \                  \
                             \------no--------> s_regular_load

您可以通过两种方式截断 table。您可以使用预查询使用以下条件删除 tables。

delete from table where to_char(sysdate, 'DD') = '01'; -- You can also use required date instead of sysdate

或者您可以创建一个过程来截断 table 具有相同条件