oracle 触发器 删除表中的内容插入到另一张表
时间: 2024-01-18 17:15:24 浏览: 67
您好!针对您的问题,您可以通过编写 Oracle 触发器实现将表中的内容插入到另一张表中。具体实现方法如下:
1. 创建目标表,用于存储被删除的记录:
```sql
CREATE TABLE target_table (
id NUMBER,
name VARCHAR2(50),
deleted_at DATE
);
```
2. 创建触发器,将被删除的记录插入到目标表中:
```sql
CREATE OR REPLACE TRIGGER trigger_name
AFTER DELETE ON source_table
FOR EACH ROW
BEGIN
INSERT INTO target_table (id, name, deleted_at)
VALUES (:OLD.id, :OLD.name, SYSDATE);
END;
```
其中,`trigger_name` 为触发器名称,`source_table` 为需要删除记录的原始表名称,`:OLD` 为关键字,表示被删除的记录。在触发器中,我们可以通过 `:OLD` 来获取被删除的记录的信息,然后将这些信息插入到目标表中。
需要注意的是,触发器只会在删除操作执行后触发,所以如果您需要将表中的内容插入到目标表中,还需要执行删除操作。
希望这个回答对您有所帮助!
相关问题
触发器往A表插入B表中查询出来的内容
好的,以下是一个Oracle PL/SQL INSERT触发器的示例,它会在插入新行之前将另一个表中的特定值插入到指定的列中:
```
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON A
FOR EACH ROW
DECLARE
my_value B.column_name%TYPE;
BEGIN
SELECT column_name INTO my_value FROM B WHERE b_id = :NEW.b_id;
:NEW.column_name := my_value;
END;
/
```
在这个例子中,我们创建了一个名为“my_trigger”的触发器,它在每次向“A”表中插入新行之前触发。在触发器的主体中,我们首先声明了一个变量“my_value”,它的类型与“B”表中的“column_name”列相同。然后,我们执行了一个SELECT语句,从“B”表中检索出与将要插入到“A”表的行相关联的“column_name”值,并将其存储在“my_value”变量中。最后,我们将“my_value”变量的值插入到“A”表的“column_name”列中。这将确保在插入新行时,该列始终包含来自“B”表的相应值。
触发器往A表插入B表中查询出来的几列内容
好的,以下是一个Oracle PL/SQL INSERT触发器的示例,它会在插入新行之前将另一个表中的多个列的值插入到指定的列中:
```
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON A
FOR EACH ROW
DECLARE
my_value1 B.column_name1%TYPE;
my_value2 B.column_name2%TYPE;
BEGIN
SELECT column_name1, column_name2 INTO my_value1, my_value2 FROM B WHERE b_id = :NEW.b_id;
:NEW.column_name1 := my_value1;
:NEW.column_name2 := my_value2;
END;
/
```
在这个例子中,我们创建了一个名为“my_trigger”的触发器,它在每次向“A”表中插入新行之前触发。在触发器的主体中,我们首先声明了两个变量“my_value1”和“my_value2”,它们的类型与“B”表中的相应列相同。然后,我们执行了一个SELECT语句,从“B”表中检索出与将要插入到“A”表的行相关联的“column_name1”和“column_name2”值,并将它们存储在“my_value1”和“my_value2”变量中。最后,我们将“my_value1”变量的值插入到“A”表的“column_name1”列中,“my_value2”变量的值插入到“A”表的“column_name2”列中。这将确保在插入新行时,这两列始终包含来自“B”表的相应值。