出于一些原因,需要在后台多次执行两条insert语句。
begin
for i in 1 .. 100 loop
b_id := seq_book.nextval;
insert into t_book t
(t.book_id,
t.book_name,
t.create_time)
values
(b_id, 百科全书, sysdate);
insert into t_book_status t
(t.book_id,
t.book_status)
values
(b_id,used);
end loop;
end;b_id是两张表的主键,通过sequences(seq_book)控制。以上语句执行后报错,请问应该如何修改?
begin
for i in 1 .. 100 loop
b_id := seq_book.nextval;
insert into t_book t
(t.book_id,
t.book_name,
t.create_time)
values
(b_id, 百科全书, sysdate);
insert into t_book_status t
(t.book_id,
t.book_status)
values
(b_id,used);
end loop;
end;b_id是两张表的主键,通过sequences(seq_book)控制。以上语句执行后报错,请问应该如何修改?
有意思吗?
直接自动根据sequence生成不行吗,不怕id重复?
2、将used换成0或1试试,如果可以,说明used有问题
利用触发器来实现操作,不用变量,第一个表中用序列号的下一个值,第二个表用序列号的当前值。
我认为这样应该是可以了,楼主可以参考下。
create or replace
TRIGGER t_t_book after delete or insert or update on t_book FOR EACH ROW
begin
if inserting then
insert into t_book_status t
(t.book_id,
t.book_status)
values
(:new.b_id,1);
elsif deleting then
null;
elsif updating then
null;
end if;
end;
方法一 用循环插入的方法,必须先声明变量b_id
DECLARE
b_id NUMBER(4);
begin
for i in 1 .. 100 loop
b_id := seq_book.nextval;
insert into t_book t
(t.book_id,
t.book_name,
t.create_time)
values
(b_id, '百科全书', sysdate);
insert into t_book_status t
(t.book_id,
t.book_status)
values
(b_id,'used');
end loop;
end;
--方法二 用后触发器,必须先创建后触发器tri_zxc
--第一步,创建后触发器tri_zxc
CREATE TRIGGER tri_zxc
AFTER INSERT ON t_book
BEGIN
insert into t_book_status t
(t.book_id,
t.book_status)
values
(seq_book.currval,'used');
END;
--第二步,执行插入语句
begin
for i in 1 .. 100 loop
insert into t_book t
(t.book_id,
t.book_name,
t.create_time)
values
(seq_book.nextval, '百科全书', sysdate);
end loop;
end;
希望对楼主有所帮助