截断整个 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 具有相同条件
我在 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 具有相同条件