Вы должны проверить, какие столбцы составляют индекс первичного ключа (PK_PAYMENT_COMMON). Сделайте это следующим утверждением:
SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cols.table_name = 'PAYMENT_COMMON'
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;
Но основная проблема с вашим оператором INSERT
заключается в том, что строки уже существуют в таблице PAYMENT_COMMON
, поэтому не нужно их снова вставлять.
Кроме того, лучше быть явным, чем неявным при выполнении операторов DML (INSERT
, UPDATE
или DELETE
). Поэтому избегайте SELECT *
и укажите все столбцы. Это помогает избежать непредвиденных ошибок при изменении структуры таблицы.
Предполагая, что PCO_NUMBER
является первичным ключом (измените предложение WHERE
в операторе EXISTS
, в зависимости от результатов вышеупомянутого), запрос должен быть следующим:
INSERT INTO PAYMENT_COMMON
(
PCO_NUMBER,
ID_BUILD,
NUM_DEPARTMENT,
PGC_DATE_CANCELATION,
PGC_AMMOUNT_PAY,
ID_VIA_PAYMENT
)
SELECT
PCO_NUMBER,
ID_BUILD,
NUM_DEPARTMENT,
PGC_DATE_CANCELATION,
PGC_AMMOUNT_PAY,
ID_VIA_PAYMENT
FROM PAYMENT_COMMON1 C1
WHERE NOT EXISTS (
SELECT 1
FROM PAYMENT_COMMON C
WHERE C.PCO_NUMBER = C1.PCO_NUMBER
);