今天在工作中又用到了存储过程,很多东西,都生疏了,花了点时间才写出来
,这里就记下来,以免下次再用时,又要到网上到处去找资料。
首先是在Oracle中写存储过程,今天就碰到这样一个问题:
在写一个update语句时,还是用+去连接两个字段值,如:
update core_department set full_title=rootDeptName+'-'+vparentdeptname
+'-'+vcurrentdeptname,
这个时候如果你的存储过程其它地方写的没有错误时,当创建这个存储过程时,它不会
报错,但是到运行这个过程时就会老是执行失败,报出的原因也不明确。这里得把+ 换
成|| 来连接才OK:
update core_department set full_title=rootDeptName||'-'||
vparentdeptname||'-'||vcurrentdeptname,
这里,今天还学会了一个新的东西,那就是用plsql developer来调试我们的存储过程,
具体做法是:
在plsql developer的左边窗口,点击要调试的存储过程,右键选择TEST,再在右键菜单
中选择Add debug information.在右边窗口的下边有输入参数的选项,如果有参数就输
入相应的值,再点/按start debugger(F9)开始我们的测试,Run(Ctrl+N)
随时在
varible List中输入我们想查看的变量 其它:
Step into(Ctrl+N):单步调试,进入
下一步
Step over(Ctrl+O):结束该语句
Step out(Ctrl+T):跳出该过程
Run to
next exception:进入下一个断点Breakpoint
Toggle Breakpoint设置断点:光标指
向一行,Ctrl+B;或鼠标点中该行的行号边缘
这样基本就可以进行调试了。
这里贴出我自己写的一个存储过程:
create or replace procedure add_core_department_pro(
)as
--rootDeptName 根机构的部门名称
begin
end;
完了之后就是Java对这个过程的调用:
Connection con = null;
CallableStatement
call = null;
con = getSession().connection();
call = con.prepareCall("{ call add_core_department_pro(?,?,?,?,?) }");
call.setLong(1, pid);
call.setString(2, parentDeptName);
call.setString(3, currentDeptName);
call.registerOutParameter(4, Types.VARCHAR);
call.registerOutParameter(5, Types.VARCHAR);
call.execute();
这里为call对象设置参数时必须从1开始,而不是。当要设置输出参数时要用call.registerOutParameter方法