最近有需求做oracle数据处理,再次用到储存过程,特意做一次关于对储存过程总结!
1.名称说明以及本人理解的解释
包头、包体、方法、过程
这四个就从上到下依次是方法、过程、包头、包体。
包头、包体,是方法的一共汇总包,类似java 的package 和里面的java程序,也可以理解为java的接口和接口的实现。包头定义了一堆方法,包体来实现。
方式:就是一组程序,只是有显示的返回类型;
过程:也是一组程序,没有显示的返回类型;
2.必须掌握知识
2.1定义变量:(v_dept,v_sum 变量,够用了)
v_dept varchar2(100);
v_sum number;
2.2赋值语句:
v_dept := '部门';
v_sum := 10;
2.3循环语句
2.3.1 for循环(一般用这个)
for row in data loop (将data每条数据 放到row 中,游标获得data,下面说)
循环体row.dept
end loop;
2.3.2 fetch 循环(动态游标使用这个)(引用链接https://www.cnblogs.com/taony/p/5670820.html)
--Fetch 循环 OPEN C_EMP;--必须要明确的打开和关闭游标 LOOP FETCH C_EMP INTO C_ROW; EXIT WHEN C_EMP%NOTFOUND; DBMS_OUTPUT.PUT_LINE(C_ROW.todo_id || '++' ); END LOOP; CLOSE C_EMP;
2.3.输出语句,类似java 的控制台输出语句 system.out.print
dbms_output.put_line(v_dept);
2.4.拼接语句,和oracle sql 一样
v_dept ||‘是’|| v_dept ||‘个 结果:部门是10个;
2.5.判断语句(够用了)
if dept=10 then
do something
end if;
2.6.执行拼接好的sql 语句方法
sql := 'update dept表 t set t.flag =''9'' where t.recid = ''' ||recid||'''';
execute immediate sql;
commit;
2.7.调试:plsql new file=》test window 打断点
2.8 注释:
-- 注释内容
/********注释内容*********/
2.9 游标(cursor ) 定义(单独说,有点复杂)
一般分两种,静态游标和动态游标
2.9.1 静态游标定义:获得游标数据的sql 是不变的,执行一次,可以写死。
cursor c1 is select table_name from user_tables;
使用:
for row in cursor loop
循环体row.dept
end loop;
2.9.2 动态游标:获得游标数据的sql 是动态的,随着条件改变(引用链:https://blog.youkuaiyun.com/sevenkj/article/details/49661459)
定义:my_dept_rec 是动态游标
type cur is ref cursor;
my_dept_rec cur;
应用:
open my_dept_rec for str ;
loop
--获取游标数据到字符串中
fetch my_dept_rec into strJLDH;
exit when my_dept_rec%notfound;
循环体
end loop;
--关闭游标
close my_dept_rec
3.实例(很多,不写了)