Oracle SQL 根据创建日期和外键保留期设置 table 条目值

Oracle SQL set table entries value based on crationdate and foreignkeys rententionperiod

为了简单起见,我有 2 个表,我更改了表的名称并删除了不需要的列:

TABLE A(b_ref,创建,检测)

TABLEB(id,retention_period)

我正在尝试创建一个程序,如果 'A.created' 日期早于 'B.retention_period' 天,它将 'A' 的每个条目的 'A.detected' 值设置为 1 .

根据这里的一些教程和其他线程,我这样做了——甚至没有编译:


 1  CREATE OR REPLACE PROCEDURE DETECT_RETENTION_EXPIRE AS 
 2  BEGIN
 3  UPDATE( 
 4  SELECT b_ref, created , b.id , b.retention_period  
 5  FROM A
 6  INNER JOIN B b 
 7  ON b_ref = b.id 
 8  WHERE created <= (SYSDATE - interval b.retention_period day) 
 9  ) a 
 10 SET a.detected = 1;
 11
 12 END DETECT_RETENTION_EXPIRE;

编译器给我以下错误:

On line 4 - PL/SQL: SQL STATEMENT IGNORED
On line 9 - PL/SQL: ORA_00907: RIGHT BRACKET MISSING

我不确定我做错了什么,你能帮我吗?

提前致谢

您需要使用interval '1' day或直接使用*b.retention_period并且a.detected必须存在于SELECT子句如下:

CREATE OR REPLACE PROCEDURE DETECT_RETENTION_EXPIRE AS 
   BEGIN
   UPDATE( 
   SELECT b_ref, created , b.id , b.retention_period, a.detected  
   FROM A
   INNER JOIN B b 
   ON b_ref = b.id 
   WHERE created <= (SYSDATE - b.retention_period ) -- or b.retention_period * interval '1' day 
   ) a 
  SET a.detected = 1;

  END DETECT_RETENTION_EXPIRE;