代码之家  ›  专栏  ›  技术社区  ›  z22

oracle中的合并比较日期

  •  0
  • z22  · 技术社区  · 12 年前

    我希望将FromDate和ToDate传递到过程中,然后更新并插入值,如下所示。这个 student studLoad 表中各有3个字段: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
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   z22    12 年前

    得到了我的错误-;更新后不需要,即正确的代码为:

     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;
    
        2
  •  -1
  •   Anjan Biswas    12 年前

    将where括在括号中,如

    where (s.insertdate>f_date);