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;
为了简单起见,我有 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;