Запрос:
INSERT INTO CUST_ID_HISTORY(CUST_ID,PREVIOUS_CUST_ID,UPDATE_DATE)
SELECT CUST_ID,PREVIOUS_CUST_ID,UPDATE_DATE
FROM CUST_ID_HISTORY
будет дублировать все строки таблицы CUST_ID_HISTORY
.
Добавление фильтра:
WHERE NOT EXISTS (
SELECT 1
FROM CUST_ID_HISTORY
WHERE CUST_ID='SCB301' AND PREVIOUS_CUST_ID='SCB201'
);
Проверяет, существует ли существующая строка в таблице с CUST_ID='SCB301' AND PREVIOUS_CUST_ID='SCB201'
, если строка не существует, тогда все строки из таблицы CUST_ID_HISTORY
будут продублированы и, если такая строка существует, тогда оператор вставит ноль строк.
Таким образом, ваш запрос либо продублирует все строк, либо ничего не сделает.
Если вы хотите вставить одну новую строку, проверяя, что она не существует, то:
INSERT INTO CUST_ID_HISTORY(CUST_ID,PREVIOUS_CUST_ID,UPDATE_DATE)
SELECT 'SCB301',
'SCB201',
SYSDATE -- The current date/time
FROM DUAL
WHERE NOT EXISTS (
SELECT 1
FROM CUST_ID_HISTORY
WHERE CUST_ID='SCB301' AND PREVIOUS_CUST_ID='SCB201'
);
или
MERGE INTO CUST_ID_HISTORY dst
USING (
SELECT 'SCB301' AS CUST_ID,
'SCB201' AS PREVIOUS_CUST_ID
FROM DUAL
) src
ON ( src.CUST_ID = dst.CUST_ID
AND src.PREVIOUS_CUST_ID = dst.PREVIOUS_CUST_ID )
WHEN NOT MATCHED THEN
INSERT ( CUST_ID, PREVIOUS_CUST_ID, UPDATE_DATE )
VALUES ( src.CUST_ID, src.PREVIOUS_CUST_ID, SYSDATE );
Который одновременно проверит, существует ли существующая строка, и вставит одну строку, если она не существует.