在pl / sql中处理日期时出错?

时间:2015-12-10 19:49:42

标签: sql oracle plsql

这是它应该如何工作: 我有一个名为Pro2的表,其中一个名为finall的列是一个日期,另一个名为validade。如果finall已经发生或正在发生,则验证被设置为0。

BEGIN
     FOR validade in (SELECT * FROM PRO2 WHERE TRUNC(finall)<= TRNCU(SYSDATE))
     LOOP
     SET validade = 0
     END LOOP;
END;

我是PL / SQL的新手请帮忙!

2 个答案:

答案 0 :(得分:0)

您的第二个TRUNC命令中有错误。

您不应将validadeCURSOR}设置为任何值。

PL / SQL中的赋值运算符为:=而非SET

试试这个:

BEGIN
     FOR r_record IN (SELECT * 
                        FROM PRO2 
                       WHERE TRUNC(finall) <= TRUNC(SYSDATE))
     LOOP
         UPDATE PRO2 t1
            SET t1.validade = 0
          WHERE t1.id = r_record.id;
     END LOOP;
END;

你不应该使用PL / SQL来做这件事!

尽可能使用SQL!

UPDATE PRO2
   SET validade = 0
 WHERE TRUNC(finall) <= TRUNC(SYSDATE);

答案 1 :(得分:0)

每个设计良好的Oracle表都有一个主键,通常称为 id 或以其结尾。这就是亚历克斯所说的t1.id.您应该要求为PRO2制作主键的列(-combination)并替换它。

显示的UPDATE之类的DML代码可以包含在PLSQL中,并且确实是最好的解决方案:

BEGIN
   -- other things here ....
   UPDATE pro2
      SET validade  = 0
    WHERE TRUNC( finall ) <= TRUNC( SYSDATE );
-- and here ...
END;