楼主: dingjun123

[精华] 【有奖讨论】PL/SQL编程要点和注意点

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
81#
发表于 2012-2-15 23:15 | 只看该作者
楼上的第二点可否举个例子?我还没发现过。内置包都是向下兼容的。

使用道具 举报

回复
论坛徽章:
7
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52数据库板块每日发贴之星
日期:2010-11-28 01:01:012011新春纪念徽章
日期:2011-02-18 11:43:35ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22灰彻蛋
日期:2012-04-22 15:50:51紫蛋头
日期:2012-12-27 15:05:08茶鸡蛋
日期:2013-07-17 11:24:34
82#
发表于 2012-3-2 20:03 | 只看该作者
1
对于BULK  来说 前提你的数据缓存足够
2 对于变量最好是加个什么前缀 以及异常处理

使用道具 举报

回复
论坛徽章:
7
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52数据库板块每日发贴之星
日期:2010-11-28 01:01:012011新春纪念徽章
日期:2011-02-18 11:43:35ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22灰彻蛋
日期:2012-04-22 15:50:51紫蛋头
日期:2012-12-27 15:05:08茶鸡蛋
日期:2013-07-17 11:24:34
83#
发表于 2012-3-2 20:03 | 只看该作者
3  还有的加注释 不然后期的维护的人 维护费劲

使用道具 举报

回复
论坛徽章:
104
生肖徽章2007版:猪
日期:2012-07-12 14:24:56菠菜神灯
日期:2013-05-26 22:03:18生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-11 19:07:11生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-19 11:10:12ITPUB伯乐
日期:2012-05-22 15:05:25NBA季后赛纪念徽章
日期:2013-06-21 14:52:05NBA季后赛大富翁
日期:2013-06-21 14:57:11
84#
发表于 2012-4-2 20:45 | 只看该作者
GOOD!

使用道具 举报

回复
论坛徽章:
4
奥运会纪念徽章:蹦床
日期:2012-08-31 15:50:20ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31
85#
发表于 2012-7-11 16:57 | 只看该作者
这个帖子结束没有的,有无总结?

使用道具 举报

回复
论坛徽章:
3
ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02
86#
发表于 2012-8-16 09:24 | 只看该作者
近九成网友 发表于 2011-12-28 14:14
第一点,表名、列名和变量名有时候是会重名,这个麻烦是很难查找的,所以所有变量必须加前缀;再有就是不同 ...

通常是:
参数P_
变量V_
包体PKG_
函数FUN_
过程PROC_
……

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
21
ITPUB十周年纪念徽章
日期:2013-06-18 22:48:19马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02优秀写手
日期:2013-12-18 09:29:12林肯
日期:2013-10-31 18:06:48奥迪
日期:2013-09-12 15:57:04ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:11蛋疼蛋
日期:2013-06-17 14:35:03ITPUB社区千里马徽章
日期:2013-06-09 10:15:342013年新春福章
日期:2013-05-27 10:23:00
87#
发表于 2012-8-16 17:16 | 只看该作者
1.写个文档就规范了,这个简单,没有按照规范做的,重新来
2.基本的函数和存储过程都要异常,异常的话尽量抛出ORACLE异常,除非逻辑上的异常采用自定义异常,否则不要轻易使用自定义异常,为的是便于定位问题
3.尽力不使用动态SQL,除非万不得已,需要使用动态SQL的话,尽量用应用前端拼接SQL
4.能用PL/SQL的就用PL/SQL,因为业务是跑在ORACLE下的,PLSQL有自己的特性
5.CURSOR能不用就不用,要用的话尽量使用隐式游标,避免因打开而没有关闭造成性能问题
6.没有什么好说的,开发的时候考虑不了太多,后期AWR调整
7....函数,存储过程
8...

帖子好老

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:沙滩排球
日期:2012-08-20 16:25:002014年新春福章
日期:2014-02-18 16:48:49马上加薪
日期:2014-02-18 16:48:49
88#
发表于 2012-8-16 22:17 | 只看该作者
本帖最后由 oracle1521 于 2012-8-16 22:34 编辑

★在每个规则内,我会做如下提示:
:建议的做法;
X :不建议的做法。



多表连接时要给出表的别名,明确是哪个表中的列
X : SELECT  ,abd003
FROM  ab001 ,ab020
WHERE  ab001.col2=ab020.col3

: SELECT  t1.abc002,t2.abd003
FROM  ab001 t1,ab020 t2
WHERE  t1.col2=t2.col3

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:沙滩排球
日期:2012-08-20 16:25:002014年新春福章
日期:2014-02-18 16:48:49马上加薪
日期:2014-02-18 16:48:49
89#
发表于 2012-8-16 22:18 | 只看该作者
本帖最后由 oracle1521 于 2012-8-16 22:34 编辑


:建议的做法;
X :不建议的做法。


隐式游标要捕获 NO_DATA_FOUND、TOO_MANY_ROWS 两类异常
×:BEGIN
SELECT ename INTO vs_ename from emp WHERE empno=1234;
   ……
END;
○:EGIN
       SELECT ename INTO vs_ename from emp WHERE empno=1234;
EXCEPTION
WHEN  no_data_found  THEN
   
    oi_flag  := -1;
   
    os_msg  := ‘XXX记录已不存在’;
   
    return;
WHEN  too_many_rows THEN
   
    oi_flag  := -1;
   
    os_msg  := ‘XXX员工数量异常,超过一条’;
   
    return;
END;

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:沙滩排球
日期:2012-08-20 16:25:002014年新春福章
日期:2014-02-18 16:48:49马上加薪
日期:2014-02-18 16:48:49
90#
发表于 2012-8-16 22:19 | 只看该作者
本帖最后由 oracle1521 于 2012-8-16 22:35 编辑

:建议的做法;
X :不建议的做法。


异常处理的处理顺序是先特殊再通用,在程序的最外层才捕获
通用异常(others)
不要在内部块中捕获 others 异常,不要简单的掩盖数据的错误,处理的原则是先特殊,再
通用,others放最外层。
×:BEGIN
       SELECT ename INTO vs_ename from emp WHERE empno=1234;
EXCEPTION
WHEN others THEN
    oi_flag := -1;
    os_msg := ‘查询出现未知异常’;
    return;
END;
○:BEGIN
--此处处理特殊的异常,包括自定义异常
BEGIN
         SELECT ename INTO vs_ename from emp WHERE empno=1234;
EXCEPTION
WHEN no_data_found THEN
         oi_flag := -1;
         os_msg := ‘XXX记录已不存在’;
         return;
WHEN too_many_rows THEN
         oi_flag := -1;
         os_msg := ‘XXX员工数量异常,超过一条’;
         return;
   END;
--在最外层处理通用异常
EXCEPTION
   
   WHEN  others THEN
      
       oi_flag  := -1;
      
       os_msg  := ‘查询出现未知异常’;
         
          return;
END;

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表