Я новичок в Oracle.
У меня есть таблица в Oracle, которая имеет 4 столбца Period, Open_Flag, Creation_Dt, Update_By. Столбец Период является основным ключом таблицы.
Я создал прок, который будет проверять значение периода от входного параметра в таблице, если его существующее, значение Open_flag должно быть обновлено иначе должна быть вставлена новая запись.
create or replace PROCEDURE PROC_REF_SAP_PERIOD( V_PERIOD IN NUMBER,V_OPEN_FLAG IN VARCHAR2,V_CREATION_DT IN DATE,V_UPDATED_BY IN VARCHAR2) AS BEGIN MERGE INTO REF_SAP_PERIOD T USING (SELECT * FROM REF_SAP_PERIOD WHERE PERIOD=V_PERIOD )S ON (T.PERIOD=S.PERIOD ) WHEN MATCHED THEN UPDATE SET OPEN_FLAG = V_OPEN_FLAG --WHERE PERIOD=V_PERIOD AND CREATION_DT=V_CREATION_DT AND UPDATED_BY=V_UPDATED_BY WHEN NOT MATCHED THEN INSERT (PERIOD,OPEN_FLAG,CREATION_DT,UPDATED_BY) VALUES (V_PERIOD,V_OPEN_FLAG,V_CREATION_DT,V_UPDATED_BY); END;
Проблема в том, что обновление работает хорошо в этом случае, однако вставка не работает.
Пожалуйста, помогите.Вставить в Merge не работает в Oracle
-2
A
ответ
0
Вы объединяете таблицу с собой, фильтруется по периоду. Очевидно, он никогда не увидит ваши несуществующие ценности сам по себе.
Попробуйте эту строку вместо вашего ПРИМЕНЕНИЯ линии:
using (select V_PERIOD "period" from dual)S
Пожалуйста, текст [не скриншоты] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload Прообразы-оф-кода-на-так: когда-спрашивать-а-вопрос/285557 # 285557). Скажи, что я хочу помочь тебе; если бы вы разместили какой-либо текст, я мог бы легко скопировать код, попробовать и отредактировать его; если вы разместите изображение, я просто голосую, чтобы закрыть вопрос. – Aleksej
Извините @Aleksej ... Я сейчас обновил вопрос. – Meen