出于一些原因,需要在后台多次执行两条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)控制。以上语句执行后报错,请问应该如何修改?

解决方案 »

  1.   

    used 是什么?用0或1代替的还是字符串used,如果是怎么没加''
      

  2.   

    还有 b_id := seq_book.nextval;
     有意思吗?
    直接自动根据sequence生成不行吗,不怕id重复?
      

  3.   

    1、将百科全书改成'百科全书'
    2、将used换成0或1试试,如果可以,说明used有问题
      

  4.   

    楼主的意思是利用变量b_id,保存序列号的下一个值。然后用b_id来分别往两个表中插入数据,我的理解是这样的。不知我的理解是否正确。我的想法是,你可以不这样做。
    利用触发器来实现操作,不用变量,第一个表中用序列号的下一个值,第二个表用序列号的当前值。
    我认为这样应该是可以了,楼主可以参考下。
      

  5.   

    zhaoxiangchong理解的完全正确。可惜我没用过触发器,能否针对我的这种情况举个例子,多谢!
      

  6.   


    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;
      

  7.   

    下面的两种方法,我已经都验证无误了,楼主可以看看
    方法一  用循环插入的方法,必须先声明变量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;
    希望对楼主有所帮助