TRUNCATE вся таблица, если TO_CHAR (SYSDATE, 'DD') = '01' в SQL - PullRequest
1 голос
/ 24 марта 2020

У меня есть большой набор записей ( 1.2m + записи ) в таблице, в которую соответственно добавляются / обновляются ежедневные записи.

Теперь у меня появилось новое бизнес-требование.

Требование следующее:

ЕСЛИ CURRENT_DAY равен 01, т. Е. Каждый 1-й день месяца таблица будет TRUNCATED, если нет, тогда обычное задание вставки / обновления будет продолжено.

Я решил с конца INFORMATICA ETL, logi c будет таким, как показано ниже,

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

Таким образом, требование выполнено.

Но я хочу знать, есть ли другой способ добиться этого, используя ТОЛЬКО ЧИСТУЮ ПЛ / SQL или SQL?

Пожалуйста, ведите меня.

Ответы [ 3 ]

2 голосов
/ 24 марта 2020

Вы можете использовать PL/SQL следующим образом:

BEGIN
IF TRUNC(SYSDATE) = TRUNC(SYSDATE,'MON') THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE YOUR_TABLE';
END IF;
END;
/
0 голосов
/ 02 мая 2020


Привет,

Вы можете обрезать таблицу двумя способами. Вы можете использовать предварительный запрос для удаления таблиц, используя приведенное ниже условие.

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

Или вы можете создать процедуру для усечения таблицы с таким же условием

Спасибо

0 голосов
/ 17 апреля 2020

Используйте Decision Task, чтобы проверить, является ли это первый день месяца. Если это так, запустите фиктивный сеанс с включенной опцией truncate target table и несколько фиктивных запросов в SQ (например, select 1 from dual where 1=2. Затем подключите его к обычному сеансу загрузки данных. Подключите Decision к тому же обычному сеансу загрузки данных с помощью False условие также, чтобы он запускался напрямую, если это не 1-й день месяца.

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