在oracle中合并比较日期

在oracle中合并比较日期,oracle,oracle10g,data-warehouse,Oracle,Oracle10g,Data Warehouse,我希望将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

我希望将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;
约会的事给我添了麻烦。我哪里做错了

编辑以包含错误


用括号将where括起来,如

where (s.insertdate>f_date);

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

 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;

您特别遇到了什么“日期”问题?当我删除代码中的sl.insertdate=trunc(sysdate)和trunc(sysdate)时,会创建过程(但它当然不符合我的要求)。一般来说,如果您遇到错误,发布错误而不是让我们猜测是非常有帮助的。我假设您遇到编译错误,因为您试图在
INSERT中指定
WHERE
子句。。。无效语法的VALUES
语句。这也将有助于准确地解释你的要求是什么-我们不知道你会认为是“正确的”。啊,我的错误,请审查我编辑的职位知道错误。它不包含where子句,而是包含日期部分。这对修复OP的错误没有任何作用。表达式周围的括号完全是可选的…@NWest-括号是可选的,但没有错!并且不能证明您对回复投了否决票(除非您是此处指定的Oracle警察)OP遇到的错误是第12行的
错误:PLS-00103:遇到符号“END”
。添加括号如何回答OP的问题?它只会给可能正在学习该语言的人带来困惑。我们试图调试该问题(以及OP)。查询很好,根据错误,很明显某个地方缺少一个符号,因此我试图解决这个问题。我不知道为什么它会让人困惑(而且它是一种编写代码的结构化方式,更具可读性)。另外,仅供参考-我在回答中没有说“这里的答案将解决您的问题”。让我们说你想否决这篇文章,今天到此为止。
 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;