forall没有类似loop和end loop关键字配对。也就意味着forall语句后面只能跟一个SQL语句调用

解决方案 »

  1.   

    FORALL 后面可以跟的应该是DML语句,insert,update delete 都可以
      

  2.   

    您好:
    謝謝,
    1.其中 DML 只能接1行吧?
    2.上述程式碼中,
    FOR i IN l_desc_tab.first .. l_desc_tab.last LOOP
          INSERT INTO t1
          VALUES (t1_seq.nextval, l_desc_tab(i))  /*使用自動序號*/
          RETURNING id, description BULK COLLECT INTO l_tab;
        END LOOP;我接著用  DBMS_OUTPUT.put_line(l_tab.count);         //-->??只有1筆
    請問這正確嗎? 那如何能讓他 RETURNING   實際寫入 筆數?謝謝!
      

  3.   

    你的意思是插入一条,然后界面显示一次,那不就失去bulk into的意义了吗,直接用cursor就好了
    bulk into本身是批量处理的语句,整个批次执行完成后才会再进行响应的
    bulk into 固定和for all 搭配使用,改成loop end loop的模式应该语法上都过不去
    for all 后面只能跟1个sql语句
      

  4.   

    不好意思,沒說清楚,

    FOR i IN l_desc_tab.first .. l_desc_tab.last LOOP
          INSERT INTO t1
          VALUES (t1_seq.nextval, l_desc_tab(i))  /*使用自動序號*/
          RETURNING id, description BULK COLLECT INTO l_tab;
        END LOOP;執行完畢後,  l_tab  為何只有1筆資料??
    若INSERT 3筆,應該是 l_tab.count =3 才對,但卻=1所以要如何寫,才會等於3 ?
    謝謝!
      

  5.   

    ORACLE批量绑定FORALL与BULK COLLECT