问题描述
在表中有一列称为文本(列名)的列。我想从此列创建不同的列。如何使用触发器将这些列插入另一个表。我为此尝试了一些触发器,但出现了错误。我将列拆分如下。
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;