【博客文章背景】博客开通已经1、2年了,一直碍于技术能力,不敢献丑。想起1年前在一个数据处理相关项目结束后,代金排主管让我做一个数据库开发总结文档和一个Toad、PL/SQL Developer工具的存储过程测试方法总结文档,并安排讲解给其他同事们(高级主管、主管、几年工作经验的开发同事、一块进公司的毕业生)并得好评之后(更多是鼓励吧!),代说文档是丑了点,但你讲的东西让我们这些只是简单使用sql语句的人,也是大开眼界。你不是注册了博客园?你可以把它们整理一下发到上面,对自己而言是个好事情,对别人而已也是个好事情!今天手中的项目告一段落,看着自己的博客一直空着,又想着代金排主管当时的话,还有自己觉得自己只有这点能力,整理了几句话送给各位。同时借这篇文章对帮助我、鼓励我的金排主管说句:谢谢你!

  【数据库学习经历】从大二开始接触并学习数据库MS Server2005 、Oracle 10g(感谢学校开了这两门课,很多同事也吃惊我们专门开了这两门课而且每课都是一学期、必修、3个学分),虽然当时云里雾里,但是肯定把51、智联等招聘网站上查看我的求职简历的负责招聘的HR或技术主管的小朋友们吓呆了。

  【oracle使用经历】虽然学了oracle,不过从大一下学期就直使用的mysql(实在没有用到oracle的地方),不过因为从实习到现在一直接触的都是oracle ,所以MS的相关东东只能扔给老师了(惭愧惭愧)...实习时从plsql中的建表、用户、授权、增删改查到简单的java webservice对oracle的增删改查,一点点的到现在写存储过程、写job、改写优化公司老人的package、数据初始化脚本...

  【存储过程使用经历】正式入职后接触的第一个项目就是数据库Clob大字段的数据库存储过程处理,没少从博客园的技术贴偷东西(得意地笑!!!),蹒跚走来总结了这几条虽不算高深却可以少挨骂的经验教训,希望新来的(刚接触存储过程的)、常住的(论坛长时间潜水的--比如我)积极扔砖!

算了,不说了,最近上海持续高温,说多了都是汗,还是虚汗!!!

  【言归正传】总结如下:

  1. 常见的数据处理如截取、替换、包含等,先上网再实现,即“拿来主义”
  2. 变量命名要易于理解,即“望文生义”
  3. 变量命名要避开列名,即“大路朝天各走一边”
  4. 游标中的sql要尽量简单,即“简简单单我的心”
  5. 涉及到insert、update等根据约束要添加异常处理,即“防患未然”
  6. trigger中有事务机制,不能在调用的存储过程中使用commit,即“不要越俎代庖”
  7. 清空表中数据时要用“EXECUTE IMMEDIATE ‘truncate table tablename’”,即“特事特办”
  8. null与’’、’’与’’不相等,即”翻脸不认人”
  9. sql优化尽量一次完成,即"没有更好,只有够好"

  【内容解释】具体解释及(或)代码如下:

  1. “拿来主义”:亲,时刻牢记,google、度娘不能只用来八卦、娱乐,在没有费别人的脑子之前,不要尝试自己搞个算法
  2. “望文生义”:这就不用解释了
  3. “大路朝天各走一边”:1、避免自己在变量的处理中搞晕自己,特别是变量放在select结果中处理 2、可读性高(结合"望文生义")
  4. “简简单单我的心”:易于业务逻辑的确认和维护(开发人员定规则的情况及后续业务变更
  5. “防患未然”:不解释,除非你想让存储过程抛错给你的程序捕获详细信息
  6. “不要越俎代庖”:这个是基本常识,小心找死
  7. “特事特办”:不仅仅体现在对清表的操作,我们需要根据实际业务需要在存储过程中使用一些提升效率的方法
  8. ”翻脸不认人”:数据库中null、''是特殊的存在,特别是你自己定义变量然后使用的时候,要小心,有兴趣的测测代码(oracle不会错,只是我们的理解错了,你懂了吗?)

    SELECT CASE WHEN '' IS NULL
    THEN '1' ELSE '2' END testtest FROM DUAL;
    SELECT CASE WHEN '' = ''
    THEN '1' ELSE '2' END testtest FROM DUAL;
    SELECT CASE WHEN '' = NULL
    THEN '1' ELSE '2' END testtest FROM DUAL;
    SELECT CASE WHEN NULL = NULL
    THEN '1' ELSE '2' END testtest FROM DUAL;
    SELECT CASE WHEN NULL IS NULL
    THEN '1' ELSE '2' END testtest FROM DUAL;
    SELECT CASE WHEN LENGTH (NULL) <> 0
    THEN '1' ELSE '2' END testtest FROM DUAL;
    SELECT CASE WHEN LENGTH (NULL) IS NULL
    THEN '1' ELSE '2' END ttest FROM DUAL;
    SELECT CASE WHEN LENGTH ('') IS NULL
    THEN '1' ELSE '2' END ttest FROM DUAL;
    SELECT CASE WHEN LENGTH ('') = 0
    THEN '1' ELSE '2' END ttest FROM DUAL;

  9. "没有更好,只有够好":这句话不是说大家不要追求最好,而是要尽你当下的可能把代码优化好,一旦你的代码提交并发布到实际运行环境中,除非项目负责人要求你优化再优化(都这种地步,就真得优化了),否则你可以嫌它丑但尽量不要动--不错,勿动!(我们测试一轮近1周,测试至少要3轮,如果改了核心的东西,就得相关程序全盘再测,知道为什么了吧?不说了都是泪!)

附送大家使用ROWNUM,要注意几点事项:

    1、>=不考虑 ----例子:where ROWNUM >2或 ROWNUM = 2或 ROWNUM >=2的记录
2、=常伴<或1 ----例子:where ROWNUM < 3等价于 ROWNUM <= 2 或 ROWNUM=1
3、ROWNUM变为结果集
想怎么使用都随意----例子:分页查询最后一个rn
  1. 举例如下:
    select * from
    (select rownum rn ,t.* from
    test t where rownum < 4 -- 等价于rownum<=3 rownum >=4一定为空
    )temp where temp.rn > 1;--ROWNUM 变为结果集(缓存参数集)

Oracle存储过程的一点使用总结的更多相关文章

  1. oracle 存储过程(分析理解)

    我的理解 比较简单(仅供参考)   存储过程就相当于java里面的方法 简单讲就是一串代码能够实现某个特定的功能,想要使用这个方法直接调用方法名就能够使用他的功能,这就是方法 oracle 存储过程也 ...

  2. Oracle 存储过程_(收集)

    oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) IS变量 ...

  3. oracle 存储过程

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

  4. Oracle存储过程语法

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

  5. ORACLE存储过程调用Web Service

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

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

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

  7. MyBatis调用Oracle存储过程

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

  8. Oracle存储过程(转)

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

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

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

随机推荐

  1. LoadRunner如何开展性能测试

    最近一直想理清思路,特别是碰到一些业务复杂的项目,要求做性能测试,结果一时就不知道怎么下手了.因为之前面试的时候,也碰到很多面试官对性能测试知识方面的提问,面试多了,就有经验,现在写下来,脑子不会乱, ...

  2. 使用isql连接Sybase ASE数据库的常见错误及处理方式

    使用isql连接Sybase ASE数据库 Sybase ASE客户端工具中有一个比较实用的命令行工具isql.利用isql可以对ASE数据库服务器进行几乎所有的管理维护工作. 下面用isql工具连接 ...

  3. 疯狂Android第一章:Android环境配置以及基本概念

    第一章 无关痒痛:Android Studio安装,配置,基本功能介绍! 重点内容:Android应用基本结构分析. 基础概念部分(只需知道作用,原理后见代码): Activity:安卓系统中负责与用 ...

  4. 查看Android数据库文件

    使用Eclipse DDMS的File Explorer不能能看到Data目录下面的东西,可能由下面原因引起的 手机没有Root  -- 可以使用Root大师 Data文件权限不够 -- 可以使用Ro ...

  5. hibernate报错:org.hibernate.MappingException: No Dialect mapping for JDBC type: -1

    解决方法:自定义一个Hibernate Dialect. package com.yourcompany.util ; import java.sql.Types; import org.hibern ...

  6. js取整数、取余数的方法

    1.丢弃小数部分,保留整数部分 parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math.round(5/2) 4,向下取整 Math.f ...

  7. 学习asp.net比较完整的流程

    如果你已经有较多的面向对象开发经验,跳过以下这两步: 第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET. ASP.NE ...

  8. linux网络编程:三次握手与四次挥手

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 其中三次握手即建立连接 四次挥手则为关闭连接 TCP连接的11种状态 客户端独有的:(1)SYN_SENT (2)FIN ...

  9. HttpWebRequest在GetResponse时总是超时

    最近在通过RESTFUL接口来发布些数据,总是出现请求超时,好不容易找到个靠谱点的了,记下来,回去试下!! “ 问题就是我第一个HttpWebRequest在GetResponse之后,忘记将取得的W ...

  10. Sublime Text2 快捷键设置

    设置Tab两个空格: 点击 Preference -> Settings-User "tab_size":2, "translate_tabs_to_spaces& ...