1. Oracle存储过程小解
  2. 1.创建语法
  3. create or replace procedure pro_name(
  4. paramIn in type,
  5. paramOUt out type,
  6. paramInOut in out type
  7. )
  8. as(is)[类似于mysqldeclare]
  9. begin
  10. statement...
  11. end;
  12. 注:<1>入参不用写长度,只需写类型,inoutin out写在参数名后,区别于mysql写在参数名前,不写默认为in;
  13. <2>in是值传递,outin out是引用传递,in的值不可修改,out的值在进入存储过程是初始化null
  14. <3>as(is)类似于mysqldeclare,也可以在begin后使用declare定义变量;
  15. 设置变量值,也不用set,直接name := value或者使用select...into...;
  16. <4>没有类似于mysql中的变换分隔符,最后end;即可。
  17. <5>没有入参时,可不要pro_name后();
        <6>变量声明:在begin之前,直接varName type;在内部,declare varName type.变量赋值需要使用 := 符号
  18. 2.常用方法
  19. <1> if...then...elseif...then...end if;
  20. <2>多种循环:
  21. a.loop...exit when... end loop;
  22. b.while...loop....end loop;
  23. c.for...in...loop...end loop;(强烈推荐,mysql没有for循环)
         d.exit可用于跳出循环,return结束存储过程
         e.<<loopName>>...goto loopName:类似于标记;
  1. <3>游标cursor:
  2. 游标属性:
  3. cursor%found; --有数据
  4. cursor%notfound; --无数据
  5. cursor%isopen; --游标已开启
  6. cursor%rowcount; --受最后SQL语句影响的行数
  7. 3.异常处理
  8. <1>.通过关键字exception捕获异常
  9. 语法:
  10. exception
  11. when exception_decription then
  12. statemnt
  13. when exception_description2 then
  14. statement
  15. when others then
  16. statement
  17. <2>.最常用的异常:
  18. no_data_found:select into语句没有数据;
  19. too_many_rows:select into有多条数据;
  20. dup_val_on_index:唯一索引列重复;
  21. storage_error:内存溢出;
  22. zero_devide:除数为0;
  23. case_not_found:case没有匹配的条件且没有else;
  24. cursor_already_open:游标已打开;
  25. timeout_on_resource:请求资源超时。
  26. <3>.自定义异常:(类似于mysql的自定义condition,避免error_code值带来的阅读性太差的问题);
  27. progma exception_init(selfexception,-oracle_error_code);
  28. 示例:declare demo_exception exception;
  29. progma exception_init(demo_exception,-60);
  30. <4>.处理异常
  31. a.不抛出,statement处理;
  32. b.抛出异常:
  33. ●存储过程自动抛出
  34. ●通过raise关键字抛出,如 raise no_data_found;
  35. ●通过raise_application_error(error_number,message[flag(true,false)]);
  36. error_number数值范围从-20999到-20000;
  37. messgae表示异常描述;
  38. flag表示是添加到(true)或者覆盖(false)错误堆,默认是false;
  39. 如:raise_application_error(-20001,'invalid id number');
  40. <5>异常处理机制与java异常处理机制相似。
  41. 4.常用技巧:
  42. <1>execute immediate statement to param;
  43. 关键字:execute immediate...to...;
  44. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块,可以理解为执行动态SQL。
  45. 注意几点:
  46. a.不支持返回多行的操作,这种情况应该用refcursor来处理
  47. b.执行sql时不要加分好,pl/sql块时加分号;
  48. c.使用之前应该将之前的事务显示提交。
  49. 示例:
  50. execute immediate 'select dname, loc from dept where deptno = :1'
  51. into l_nam, l_loc
  52. using l_dept ;
  53. <2>sys_refscursor:非正常游标,用于返回结果集
  54. 示例:
  55. create or replace procedure up_test(o out sys_refcursor) is --可以在代码中获取返回值
  56. begin
  57. open o for select * from lq_test;
  58. end;
  59. <3>%type
  60. 作用:与关联表的关联字段类型长度绑定起来,跟随绑定表字段的变化,是一种非常好的变成习惯,避免多次更改:
  61. 示例:
  62. declare v_name students.name%type;
  63. <4>%rowtype
  64. 表示该列为行数据类型,存储的为一行数据,相当于一条record相对于查询结果或者游标。
  65. 作用:当查询一行数据时,比多个字段采用%type效率要高一些。
  66. 示例:
  67. declare
  68. v_emp emp%rowtype;
  69. cursor cursor_name is select...from table...
  70. open cursor_name
  71. for xxx in cursor_name loop
  72. v_emp := xxx;
  73. end loop;
  74. end cursor_name;

Oracle存储过程小解的更多相关文章

  1. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

  2. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  3. ORACLE存储过程调用Web Service

    1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...

  4. Oracle存储过程基本语法介绍

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  5. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  6. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  7. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  8. Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER

    关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...

  9. ORACLE存储过程学习

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

随机推荐

  1. 模板:有旋treap

    有旋转的treap,其实rotate比较难理解 没关系,上板子: 题目还是普通平衡树 #include<iostream> #include<cstdio> #include& ...

  2. session中load()跟get()的区别

    1.相同点:Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象. 2.区别在于: (1)如果未能发现符合条件的记录,get方法返回null,而l ...

  3. Beyond Compare注册码

    注册码: --- BEGIN LICENSE KEY --- H1bJTd2SauPv5Garuaq0Ig43uqq5NJOEw94wxdZTpU-pFB9GmyPk677gJ vC1Ro6sbAvK ...

  4. webService学习五(插入片,---监控方法)

    WS Explorer工具的使用: 1- web服务浏览器 2-将对应的路径copy到这里 - 3- 4-- 5-- 6--请求的数据: 7--相应数据 二.使用TCP/IP Monitor-拦截HT ...

  5. SDI在自定义的工具栏上添加下拉控件

    0.首先到自己的工具条上新建一个控件,并命名新ID 1.拷贝FlatComboBox.h和FlatComboBox.cpp到工程目录下 2.建立新类 class CTrackerToolBar : p ...

  6. finger 工具:用来查询用户信息,侧重用户家目录、登录SHELL等

    finger 工具侧重于用户信息的查询:查询的内容包括用户名(也被称为登录名Login),家目录,用户真实的名字(Name)... ... 办公地址.办公电话:也包括登录终端.写状态.空闭时间等: 我 ...

  7. MAC中怎么安装python

    转自:https://blog.csdn.net/hou_manager/article/details/79555809 一.Python 介绍 Python介绍 Python3在2008年12月3 ...

  8. ACdream 1108(莫队)

    题目链接 The kth number Time Limit: 12000/6000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) ...

  9. ubuntu查看并杀死进程

    Ubuntu 查看和杀死进程 今天在netbeans中关闭webrick时,发现没有关闭掉,打入localhost:3000 依然显示页面,发现无法从nb中再次关闭 只有进入ubuntu的进程下关闭 ...

  10. div覆盖div DIV相互重叠如何解决

    div覆盖div,出现div与div盒子之间产生重叠覆盖现象,而内容没有出现覆盖重叠现象原因与解决方法.DIVCSS5通过CSS图文案例介绍产生原因与解决方法.DIV与DIV覆盖原因与解决方法. 可能 ...