如何使用PL / SQL中的触发器将旧表插入新表

问题描述

在表中有一列称为文本(列名)的列。我想从此列创建不同的列。如何使用触发器将这些列插入另一个表。我为此尝试了一些触发器,但出现了错误。我将列拆分如下。

select 
trim(substr(text,1,62)) col1,trim(substr(text,63)) col2,systime col3 from table_1
where col4(in table_1)=6

之后,我创建了一个新的表,该表现有3列。在旧表中进行任何更改后,如何填充新表?

有人可以帮我解决这个问题吗?预先感谢。

我收到错误的触发器如下。 Table1有一个文本列,我创建的新表是table2。

CREATE TABLE table2
(column1 VARCHAR2(60),column2 VARCHAR2(30),column3 TIMESTAMP);

----------

CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON table_1
FOR EACH ROW

DECLARE

v_column1 table_2.column1%type;
v_column2 table_2.column2%type;
v_column3 table_2.column3%type;

cursor c1 is 
select trim(substr(text,62)) column1,63)) column2,systime column3 from event_list
where column4=6
and trim(substr(text,63)) not like 'LU%'
and trim(substr(text,62)) not like 'COM%';
    
BEGIN

OPEN c1;
LOOP
    FETCH c1 INTO v_column1,v_column2,v_column3;
    EXIT WHEN c1%NOTFOUND;
    INSERT INTO table2
                (column1,column2,column3)
    VALUES      (v_column1,v_column3);
                
END LOOP;
CLOSE c1;
COMMIT;     
END;
/

解决方法

访问用:new插入的行(在new子句中,返回WHEN,而不用冒号)。您不能在触发器内部提交;其插入将与发生的事务一起提交或回退。

CREATE OR REPLACE TRIGGER trg_fromt1_to_t2
AFTER INSERT ON table_1
FOR EACH ROW
WHEN 
(
  new.column4 = 6
  AND TRIM(SUBSTR(new.text,63)) NOT LIKE 'LU%'
  AND TRIM(SUBSTR(new.text,1,62)) NOT LIKE 'COM%'
)
BEGIN
  INSERT INTO table2 (column1,column2,column3)
  VALUES (TRIM(SUBSTR(:new.text,62)),TRIM(SUBSTR(:new.text,63)),:new.systime);
END trg_fromt1_to_t2;