2016-12-06 1 views
-2

오라클을 처음 사용했습니다.
필자는 오라클에 Period, Open_Flag, Creation_Dt, Updated_B 컬럼의 4 개 컬럼을 가진 테이블을 가지고 있습니다. 기간 열은 테이블의 기본 키입니다.
enter image description here
필자는 테이블의 입력 매개 변수로부터 기간의 값을 검사 할 proc을 만들었습니다. 존재하는 경우 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;
문제는 업데이트가이 경우 제대로 작동하지만 삽입이 작동하지 않는다는 것입니다.
도와주세요.병합에서 삽입 Oracle에서 작동하지 않습니다

+2

하십시오, 텍스트 [하지 스크린 샷] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload -images-of-code-on-so-ask-a-question/285557 # 285557). 내가 너를 돕고 싶다고 해. 일부 텍스트를 게시 한 경우 코드를 쉽게 복사하여 시도하고 편집 할 수 있습니다. 이미지를 게시하는 경우 질문을 종료하기 만하면됩니다. – Aleksej

+0

죄송합니다. @Aleksej ... 질문을 업데이트했습니다. – Meen

답변

0

테이블을 자신과 병합하고 기간별로 필터링합니다. 분명히, 존재하지 않는 가치를 그 자체로 결코 보지 못할 것입니다.

하여 사용 라인 대신이 줄을보십시오 :

using (select V_PERIOD "period" from dual)S 
관련 문제