我有3个表,TBL_A,TBL_B和TBL_C。
TBL_A有一个ID(让我们称之为ID_A),即A的PK,B和C的FK。在插入之前,ID_A有一个带有自动增量的触发器。
问题:
我需要制作一个看起来有点像这样的插入
INSERT ALL
INTO TBL_A(FIELD1, FIELD2) VALUES('VALUE1', 'VALUE2')--like i said before, the trigger autoinsert the id with the NEXTVAL in MY_SEQ sequence.
INTO TBL_B(ID_A, FIELD) VALUES (MY_SEQ.CURRVAL, 'VALUE')
INTO TBL_C(ID_A, FIELD) VALUE (MY_SEQ.CURRVAL, 'VALUE')
SELECT * FROM DUAL
但是,由于某种原因,它表示此会话中尚未定义序列MY_SEQ.CURRVAL。我该怎么做才能解决它?无法找到办法。
我需要保留触发器,因为插入可能很大。
PLZ帮助我,并为我的英语btw撒了^^
答案 0 :(得分:0)
INSERT ALL
INTO TBL_A(ID, FIELD1, FIELD2) VALUES(id, val1, val2)
INTO TBL_B(ID_A, FIELD) VALUES(id, val)
INTO TBL_C(ID_A, FIELD) VALUES(id, val)
SELECT
MY_SEQ.NEXTVAL as id, 'VALUE' as val, 'VALUE1' val1, 'VALUE2' val2
FROM DUAL
答案 1 :(得分:0)
这对我来说很好:
INSERT ALL INTO TBL_A(FIELD1, FIELD2) VALUES('VALUE1', 'VALUE2')
INTO TBL_B(ID_A, FIELD) VALUES (MY_SEQ.CURRVAL, 'VALUE')
INTO TBL_C(ID_A, FIELD) VALUES (MY_SEQ.CURRVAL, 'VALUE')
SELECT * FROM DUAL;
当我至少打电话一次MY_SEQ.NEXTVAL时,这确实有效。在所有其他运行中,这没有调用NEXTVAL正常工作。我认为序列必须正确初始化
答案 2 :(得分:0)
您不能在多表插入的子查询中使用序列,并且您不应该在值子句中使用它,因为它可能会产生不可预测的结果。
您可以考虑使用序列将数据填充到全局临时表中,然后使用全局临时表执行多表插入。当然这需要修改触发器。