以前一直使用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语句就可以正常执行了。