2012-08-13 4 views
0

나는 FromDate 및 ToDate를 프로 시저에 전달한 후 다음과 같이 값을 업데이트하고 삽입하려고합니다. studentstudLoad 테이블에는 각각 id, name 및 insertDate라는 세 개의 필드가 있습니다.날짜 비교 오라클에 병합

create or replace procedure incload(f_date date,t_date date) is 
begin 
    merge into studload sl 
    using student s 
     on (s.studid=sl.studid) 
    when matched then 
     update set sl.studname=s.studname, sl.insertdate= trunc(sysdate); 
    when not matched then 
     insert (sl.studid,sl.studname,sl.insertdate) 
     values (s.studid,s.studname,trunc(sysdate)) 
     where s.insertdate > f_date; 
end; 

날짜 문제는 나를 괴롭 히고 있습니다. 내가 어디로 잘못 가고 있니?

오류

ERROR at line 12: PLS-00103: Encountered the symbol "END" 

1. create or replace procedure incLoad(f_date date,t_date date) is 
2. begin 
3. merge into studLoad sl 
+1

특히 "날짜 문제"에 문제가 있습니까? –

+0

코드에서 sl.insertdate = trunc (sysdate) 및 trunc (sysdate)를 제거하면 프로 시저가 생성됩니다.하지만 당연히 내 요구 사항을 충족하지 못합니다. – z22

+3

일반적으로 오류가 발생하는 경우 매우 유용합니다 우리가 추측하기보다는 오류를 게시하는 것. 유효한 구문이 아닌 INSERT ... VALUES 문에 WHERE 절을 지정하려고하기 때문에 컴파일 오류가 발생했다고 가정합니다. 또한 귀하의 요구 사항이 무엇인지 정확히 설명하는 것이 도움이 될 것입니다. 귀하는 "올바른"것으로 간주 할 수있는 것을 모릅니다. –

답변

1

같은 괄호 안의 어디 동봉를 포함 편집; 업데이트 후 즉, 올바른 코드는 다음과 같습니다.

create or replace procedure incLoad(f_date date,t_date date) is 
begin 
merge into studLoad sl 
using student s 
on (s.studID=sl.studID) 
when matched then 
update set sl.studName=s.studName, sl.insertDate=trunc(sysdate) where s.insertDate > f_date // no semi-colon 
WHEN NOT MATCHED 
THEN 
INSERT (sl.studID,sl.studName,sl.insertDate) 
VALUES (s.studID,s.studName,trunc(sysdate)) where s.insertDate > f_date; 
end; 
-1

내 mistake-있어

where (s.insertdate>f_date); 
+0

이것은 OP의 오류를 수정하는 데는 아무런 도움이되지 않습니다. 표현식 주위의 괄호는 순전히 선택 사항입니다 ... –

+0

@ NWest- 괄호는 선택 사항이지만 잘못은 아닙니다! 응답을 투표하는 것을 정당화하지 않습니다 (귀하가 SO를 지정한 오라클 경찰이 아닌 한) – Annjawn

+0

OP에서 발생한 오류는 12 번째 줄에 오류가 있습니다 : PLS-00103 : 심볼 "END"가 발생했습니다. 괄호 추가는 OP의 질문에 어떻게 대답합니까? 그것은 단지 언어를 배우는 사람에게 혼란을 가져옵니다. –