我在Oracle中有以下查询:
INSERT INTO table2
(ID,Name,Address,MOL)
SELECT table2.ID,table2.Name,table2.Address,’sometext’
FROM table2
WHERE table2.ID=1000;
我希望在列ID具有名为 mysequence 的sequence
时实现此查询。
有人知道解决方案吗?
谢谢!
答案 0 :(得分:4)
INSERT INTO table2
(ID,Name,Address,MOL)
SELECT mysequence.nextval,table2.Name,table2.Address,’sometext’
FROM table2
WHERE table2.ID=1000;
答案 1 :(得分:2)
另一种方法是创建一个插入下一个序列值的触发器:
CREATE OR REPLACE TRIGGER myschema.table2_ins_trg
BEFORE INSERT ON myschema.table2 FOR EACH ROW
WHEN (New.ID IS NULL)
BEGIN
SELECT myschema.mysequence.Nextval INTO :New.ID FROM dual;
END;
然后在插入时取消ID:
INSERT INTO table2
(Name, Address, MOL)
SELECT table2.Name, table2.Address, 'sometext'
FROM table2
WHERE table2.ID = 1000;
我喜欢这种方法,因为如果我使用GUI工具进行插入,我可以将ID留空,它将自动填充下一个序列值。