[size=large]当我执行以下一条sql语句
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '老爸', 1001);
获取该语句的id时,,假设为1002,那么以下三条sql语句的父节点都为1002,即
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '儿子1', 1002);
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '儿子2', 1002);
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '儿子3', 1002);
现在我想用sql语句直接来写上面那三条insert语句,而不是先获得1002后 再执行
请问 怎么搞啊 。。。。。。。。。。。。。。
谢谢![/size]
用一下我这个方法,不用得到中间值1002就能插入:
[code="sql"]
insert into TEST_INFO (ID, NAME, PARENTID) select SEQ_TEST_INFO.NEXTVAL,'儿子1',ID from TEST_INFO where PARENTID=1001;
insert into TEST_INFO (ID, NAME, PARENTID) select SEQ_TEST_INFO.NEXTVAL,'儿子2',ID from TEST_INFO where PARENTID=1001;
insert into TEST_INFO (ID, NAME, PARENTID) select SEQ_TEST_INFO.NEXTVAL,'儿子3',ID from TEST_INFO where PARENTID=1001;
[/code]
上面的就是sql语句啊
[code="sql"]
insert into TEST_INFO (ID, NAME, PARENTID) select SEQ_TEST_INFO.NEXTVAL,'儿子1',ID from TEST_INFO where PARENTID=1001
[/code]
创建一个触发器试试:
[code="java"]create trigger trigger_name after insert on TEST_INFO
for each row
begin
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '儿子1', :new.ID);
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '儿子2', :new.ID);
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '儿子3', :new.ID);
end;[/code]
使用 sequence的 currval属性
[code="sql"]
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '老爸', 1001);
获取该语句的id时,,假设为1002,那么以下三条sql语句的父节点都为1002,即
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.currval, '儿子1', 1002);
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.currval, '儿子2', 1002);
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.currval, '儿子3', 1002);
[/code]
不好意思,没看清楚意思。
[quote]使用 sequence的 currval属性
Sql代码
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.NEXTVAL, '老爸', 1001);
获取该语句的id时,,假设为1002,那么以下三条sql语句的父节点都为1002,即
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.currval, '儿子1', 1002);
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.currval, '儿子2', 1002);
insert into TEST_INFO (ID, NAME, PARENTID) values (SEQ_TEST_INFO.currval, '儿子3', 1002); [/quote]
因为涉及到序列号,所以单纯使用sql语句已经很难做到合成一条语句了,可以用触发器或pl/sql编程实现,不过我想这又和你的初衷不相符了,当然还是直接写sql简单一点,目前只能做到一条一条insert into select这样的地步了。
如果没有序列的干扰,可以将几个select子句union一下,这样就就可以实现多条一次插入了!
没有序号干扰情况下一次插入,例子如下:
[code="java"]
insert into TEST_INFO (ID, NAME, PARENTID)
select '1','儿子1',ID from TEST_INFO where PARENTID=1001
union
select '2','儿子2',ID from TEST_INFO where PARENTID=1001
union
select '3','儿子3',ID from TEST_INFO where PARENTID=1001;
[/code]