plsql下面执行BEGIN END语句

以前一直使用PLSQL的存储过程和单条SQL语句,都没有发现什么问题,今天需要处理一个临时的问题,需要根据已有的数据动态添加数据到表里面。

一开始的时候是这样写的

declare v_maxid int;
begin
     select max(id) into v_maxid from t_actiongroup;
       if v_maxid is null then
            v_maxid:=0;
       end if;
     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,15,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,16,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,17,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,18,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,19,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,20,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,21,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,23,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,24,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,31,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,32,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,33,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,34,1); 
end;
commit;

这里有两个问题:
一:在PLSQL的Commond窗口里面光标一直在闪动,貌似命令没有输入完毕

一开始还不知道为什么,后来通过问别人才知道,在Commond窗口里面这样的情况需要手动打入"/"才会被提交,于是发生了另个一问题-->

二:提交以后提示在COMMIT这里报错

这才发现原来COMMIT命令不能用在这样的地方,于是改成了下面的书写方式

declare v_maxid int;
begin
     select max(id) into v_maxid from t_actiongroup;
       if v_maxid is null then
            v_maxid:=0;
       end if;
     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,15,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,16,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,17,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,18,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,19,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,20,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,21,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,23,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,24,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,31,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,32,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,33,1);

     v_maxid:=v_maxid+1;
     insert into t_actiongroup values(v_maxid,34,1);

     commit;
end;
/

就这样,SQL语句就可以正常执行了。

--------------------------------------------------------------------------------------------------------------------------------------------
顺势而为
原文地址:https://www.cnblogs.com/zhuzhenyu/p/2717990.html