0

FromDate と ToDate をプロシージャに渡し、次のように値を更新して挿入したいと考えています。studentテーブルとstudLoadテーブルには、それぞれ id、name、insertDate の 3 つのフィールドがあります。

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
4

2 に答える 2

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;
于 2012-08-13T17:47:43.543 に答える
-1

where を次のように括弧で囲みます

where (s.insertdate>f_date);
于 2012-08-13T17:45:02.123 に答える