经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
oracle学习笔记(十九) 子程序——存储过程 - Stars-one
来源:cnblogs  作者:Stars-one  时间:2019/5/31 8:48:51  对本文有异议

子程序——存储过程

我们可以使用子程序来封装一下我们需要的操作,子程序又有存储过程,函数和触发器。
这里先学习存储过程~

语法

  1. create [or replace] procedure $procedure_name$ [(参数列表)]
  2. is/as --相当于declare
  3. begin
  4. [exception]--异常处理
  5. end $procedure_name$;
  6. 删除过程:drop procedure $procedure_name$

创建存储过程

创建无参数存储过程

  1. create or replace procedure hello
  2. is
  3. begin
  4. dbms_output.put_line('hello world');
  5. end hello;
  6. / --执行

创建带参存储过程

参数有三种模式,参数类型定义不用定义宽度

模式 说明
in(默认) 模式的参数, 可以是字面量或变量形式传值
out 模式的参数, 必须以变量形式传递,变量不应该赋值,接收过程中返回的结果
in out 模式的参数, 必须以变量形式传递
  1. --输出指定字符串(使用in
  2. create or replace procedure print(text in varchar2)
  3. is
  4. begin
  5. dbms_output.put_line(text);
  6. end print;
  7. /
  8. --计算结果,返回给调用者(使用out
  9. create or replace procedure sum(num1 in int,num2 in int,result out int)
  10. is
  11. begin
  12. result := num1 +num2;
  13. end sum;
  14. /
  15. declare
  16. --变量不应该赋值
  17. v_result int := 5;
  18. begin
  19. sum(5,6,v_result);
  20. --上面的语句还可以这样写,这样便于直观的知道参数对应哪一个
  21. --sum(num1 =>5,num2=>6,result=>v_result);
  22. dbms_output.put_line(v_result);
  23. end;
  24. /
  25. --交换两个数字(使用in out)
  26. create or replace procedure swap(a in out int,b in out int)
  27. is
  28. v_temp int ;
  29. begin
  30. v_temp := a;
  31. a := b;
  32. b := v_temp;
  33. end swap;
  34. /
  35. declare
  36. a int :=5;
  37. b int := 9;
  38. begin
  39. swap(a,b);
  40. dbms_output.put_line(a||','||b);
  41. end;
  42. /

执行

PL/SQL执行

  1. begin
  2. --包名.过程名
  3. --未定义包名,不需要写包名
  4. $procedure_name$;
  5. end;
  6. /
  1. --如果想要其他用户访问当前用户的存储过程,当前用户下,授权给其他用户权限
  2. grant execute on $procedure_name$ to $user_name$;

命令行执行

  1. exec/execute $procedure_name$[(参数)]

原文链接:http://www.cnblogs.com/kexing/p/10951517.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号