参考视频:https://www.imooc.com/video/7256
常见语法参考:https://www.cnblogs.com/chinafine/articles/1776085.html
oracle存储过程的编写,在plsql基础上编写。
存储过程是没有返回值的,但是可以通过out参数返回值。
1.存储过程的调用(2中方式)
在sql窗口执行一下:
a.
begin
pro_name();
end;
b.
exec pro_name();
c. 在java代码中调用,没有返回值
<select id="selPolice" statementType="CALLABLE">
{CALL pro_name }
{CALL pro_name(param) } //有参数时的调用
</select>
d. 在plsql工具右键运行
1.无参数--存储过程
CREATE OR REPLACE PROCEDURE HELLO
AS //AS 后面是说明部分比如声明变量 AS 也可以是 IS 但不可以省略
begin // 这里面是要写的 程序
dbms_output.put_line("hello world");
end; //end结束 也可以加上存储过程名称 end HELLO;
2.有参数-不提交回滚-存储过程(存储过程最好不要提交或回滚事务,由上级程序来处理)
CREATE OR REPLACE PROCEDURE HELLO (param in number)
// (param 参数 in指明是输入参数(这里必须直面输入还是输出 in/out ) number是参数类型)
AS
newname tablename.name%type; //指明newname 类型和tablename表的name类型一致
begin
select name into newname from tablename where name = param; //将查询的结果赋值到newname中
update tablename set name='张三' where name = param;
end;
3.有输入参数--有提交回滚--存储过程
CREATE OR REPLACE PROCEDURE HELLO (param in number)
// (param 参数 in/out指输入输出参数(不写默认为in ) number是参数类型)
AS
newname tablename.name%type; //指明newname 类型和tablename表的name类型一致
begin // 这里面是要写的 程序
select name into newname from tablename where name = param;
update tablename set name='张三' where name = param;
COMMIT; //提交事务
EXCEPTION WHEN OTHERS THEN ROLLBACK; //报错时会回滚事务
DBMS_OUTPUT.PUT_LINE('没有成功执行TOLHJC_FEEDBACK');
COMMIT;
end;
4.有输出参数--存储过程
在调用存储过程时,h就是返回的值
输出参数的变量 varchar2不能定义长度
5.带有游标--存储过程
游标就是一个结果集合的定义,类似于list;
游标包含:隐式游标 :适用返回 单行的数据
显示游标 :适用返回 多行的数据
有声明的游标,都是显示游标。
CREATE OR REPLACE PROCEDURE HELLO IS
cursor CURSORNAME is SELECT * FROM TABLENAME; --声明游标指定结果集
rel TABLENAME%rowtype ; --声明变量用于接收游标中的值
begin
open CURSORNAME ;--打开游标
IF CURSORNAME%ISOPEN THEN --游标是否开启
loop --开始遍历
fetch CURSORNAME into rel; --提取游标 赋值给记录类型变量
exit when CURSORNAME %notfound; --提取不到退出循环
DELETE FROM TABLENAMET WHERE id =rel.id ; //遍历业务逻辑
end loop;--结束循环
END IF;
close CURSORNAME ; --关闭游标
COMMIT; //业务执行完 提交事务 看情况是否需要写这个
end;
6.带参数--游标
本文链接:https://my.lmcjl.com/post/12642.html
4 评论