创建用于选择最近添加的数据到CLIENT表的Oracle过程,如果找到,则将这些记录添加到Archive表

时间:2016-07-26 07:12:43

标签: oracle plsql procedure

我有一个表CLIENT,我需要对其进行过滤,以便它只显示最近添加的记录。

Append

我必须创建PL / SQL过程,将这些记录插入到Archive表中,其中Newest =' y'。最新版是存档表中的一列。并删除最新=' y'来自已存档表中的旧记录。

我被困在这里

SELECT *
FROM Client
WHERE TIMESTAMP >= sysdate -1;

2 个答案:

答案 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
    );