我有一个表CLIENT,我需要对其进行过滤,以便它只显示最近添加的记录。
Append
我必须创建PL / SQL过程,将这些记录插入到Archive表中,其中Newest =' y'。最新版是存档表中的一列。并删除最新=' y'来自已存档表中的旧记录。
我被困在这里
SELECT *
FROM Client
WHERE TIMESTAMP >= sysdate -1;
答案 0 :(得分:0)
把“SELECT * FROM Client WHERE TIMESTAMP> = sysdate -1;”进入游标,如:
CURSOR cr_c IS
SELECT *
FROM Client
WHERE TIMESTAMP >= sysdate -1;
然后在FOR循环中遍历cr_c (http://www.techonthenet.com/oracle/loops/cursor_for.php)
OR
使用触发器,也许会更好 (http://www.techonthenet.com/oracle/triggers/after_insert.php)
答案 1 :(得分:0)
如何只是合并声明。使用客户端表合并到存档。匹配ids。如果您在存档表中找到记录,则只需将最新指示符更新为“N”。如果在归档表中未找到记录,则插入记录,并以“Y”作为最新值。没有你的数据所以你可能不得不玩下面的声明,但是这样的话。
MERGE INTO archive a USING
(SELECT client_id col_a, col_b, col_c FROM Client
) c ON (a.client_id = c.id)
WHEN MATCHED THEN
UPDATE SET a.newest= 'N' WHEN NOT MATCHED THEN
INSERT
(
a.client_id,
a.newest,
col_a,
col_b,
col_c
)
VALUES
(
c.id,
'Y',
c.col_a,
c.col_b,
c.col_c
);