楼主: fei

[精华] Oracle--毛病篇

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
21#
发表于 2002-1-7 23:28 | 只看该作者
Oracle--养生之道
蓝森林 http://www.lslnet.com 2001年12月29日 18:12


作 者: 范生


——驳小赵之《Oracle--毛病篇》(12月5日)


前言:




“师者,所以传道授业解惑也 。”
首先,无论是作者的怨言还是切身感受,无论是早期的想法还是执着至今,我们今日权当技术探讨,为曾经迷惑或即将迷惑的人提供参考。
我与前文作者小赵素未谋面,但为其在技术领域的专注而感动,故落笔挥墨,简单处一带而过。

以下题号相同,可以与上篇文章同阅,不再赘述。
1、SQLPLUS只是一个客户端软件,不要指望它会继承什么,不用说serverout、pagesize,就是修改了时间显示格式,也不能被其他用户继承,这正是基于SESSION的好处啊。当然,如果你愿意永久修改些什么,可以通过修改数据字典、配置文件或注册表完成。
2、命令行编辑功能?
ORACLE调整的是缓冲区,EDIT可以实现大部分,好的管理员仍然以.SQL的脚本为主,单独的命令行少用为妙。虽然我对SQL PLUS的设计也没什么好感,但也觉得没必要弃一豹而争一斑。
3、SQLPLUS环境的命令行没有历史记录功能?
SQLPLUS现在有两个版本,(以WIN2K为例)我们如果用图形界面的SQLPLUS,其实对应的是SQLPLUSW.EXE;而如用SQLPLUS.EXE,利用系统的功能,是可以实现DOSKEY功能的。
4、命名规范混乱得一踏糊涂?
user_tab_columns, user_con_constraints,user_tables, usre_cons_columns。很有规则嘛,不要带着过去数据库的抵触情绪去理解ORACLE,我也是SQLSERVER、MYSQL、POSTSQL的开发者,所以我们要着重体会数据库思想的精髓,求同存异,这才有利于自身发展,也不至于为琐事烦恼。
5、作者已经相通了。
6、注释格式:--, 什么玩意呀?
我觉得你有必要与ANSI组织联系一下,SQL92标准的衍生物,问问微软是怎么干的?
7、PLSQL独树一帜?
PL/SQL没有号称第N代的高级语言,第四代打住了,SQL就决定了。而ORACLE也很谦虚,PL-PROCEDURE LANGUAGE,过程性语言,没有说编译,没有面向对象。至于dbms_output.put_line
  不能在FUNCTION中输出,是误解,过程可以CALL过程,因此过程中可以dbms_output.put_line,而函数可以RETURN,不会为开发带来困难。
8、没明白作者是说单引号问题还是双引号问题,不过拿语言和ORACLE相对比是不合适的,如果你说JAVA或C方便的实现,那么可以用SQLJ或PRO*C编写过程。
9、这是作者对知识点的混淆,也是没有掌握扎实PL/SQL,
var i number;
  i:=5;
  此时I是一个PLSQL变量,要输出,只能在PLSQL中输出,如*.put_line输出。
  :i := 5;
  此时:i 是一SQLPLUS的外部变量,赋值和输出,就是这种规则。
  很多时候不能想当然,如果不想走弯路,不想掘地三尺,就要踏踏实实的读些资料。
10、我无话可说,为作者的苦心感动。
11、过程和函数的用法与PLSQL匿名块的关系:
  过程的用法是要遵循各种数据库的习惯的,如MSSQL。但PLSQL是ORACLE自己的语言,可以有更多的自由。规定如何用就如何用,尤其是语法,就看个人的适应性了。唯一需要理解的是包,这是ORACLE有远见的一面,这里可以看到面向对象的痕迹,类.方法,像吧,也为以后JAVA与PLSQL的协同工作打下了基础。
12、细心AND熟能生巧。
13、我用PLSQL和SQLJ,对PRO*C不作评价。
14、DDL语句是SQL92标准的,ADD COLUMN,不用COLUMN是因为其他没有什么可以ADD,但DROP 必须加COLUMN,是因为此关键字还可以是CONSTRAINT,ORALCE没有错。
15、又回到命名的问题上了?
ORACLE的命名取舍原则是:常用的对象名或列名要简单,很少使用的名称要复杂,这是符合大多数人习惯的,尤其是ORACLE DBA,否则,一概而论反倒缺省人性化,为DBA造成沉重负担。

后话:
  肯定的说,作者的后话才是大彻大悟,说出奋斗的感觉。每一种产品,都会有优缺点,不然怎么会有后人的智慧?“人类在一个fortran语言大行其道的年代就已经登上了月球”,古人就知道善假于物也,我们可能不是爱因斯坦,但我们可以是牛顿,可以有众多可以借鉴的肩膀。ORACLE博大精深,在于她的思想和数据库的理论,不是虚张声势的外表。程序员不可多得,不是他学会多少语言。人是一个综合体,要挖掘潜在的能量,就要从不同角度入手,找到最适合自己的开发方式,使之终有一番作为。选择,并不意味着放弃原有,数据库如此,而勤奋和智慧,你又能舍弃哪一个呢?
  



http://www.sonsun.net 站长 范生(fancy@sonsun.net)

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
22#
发表于 2002-1-8 02:17 | 只看该作者

Re: Oracle--毛病篇

Good article. Some comments below:

> 2. SQLPLUS环境下命令行编辑功能微弱得可怜, 看看readline, 看看MySQL

If you use DOS sqlplus, you can delete, use arrow keys, Control-arrow keys.

> 3. SQLPLUS环境的命令行没有历史记录功能, 看看MySQL. gdb, bash

Same above

> 4. 命名规范混乱得一踏糊涂. user_tab_columns, user_con_constraints, user_tables, usre_cons_columns

What's user_con_constraints? I don't have any confusion. It goes from higher to lower level: tables -> columns -> constraints (constraints are attributes of columns). In the middle, it's abbreviated (table -> tab, column -> col, constraint -> cons). At the end, it's fully spelled out. There're exceptions such as dba_rollback_segs, not called dba_rollback_segments, as you correctly criticized in Point 15.

> 5. SQLPLUS环境的初始化文件的location的要求, 看看.bashrc, .vimrc, .netrc, .emacs, .newsrc...摸一个都比它强, 我要使用你的login.sql还非得在每一个当前目录下都弄一份, 随身携带呀? 好在这一点可以通过SQLPATH环境变量的设置来搞定.

glogin.sql is in $ORACLE_HOME/sqlplus/admin. Isn't that enough?

> 10. 在sqlplus下help set看看, 找出一个叫set severout[put] on|off的选项
  注意, 它是severout, 你在sqlplus下set severout on试试,
  SP2-0158: unknown SET option "severout" 了吧?
  set serverout on
  是的, 就一个字母而已.
  编程大师说: 任何软件都有BUG.
  但, 一个如此小的BUG可以让一个全球第二大的软件公司带着它走过几个版本?
  Oracle8.15 Oracle8.16 Oracle8.17...难道保留错误是为了兼容性?
  后记: 我终于看到Oracle9i版里对此有了改进, 略感欣慰.

I don't have any problem running "set serverout on" on 7.3.4.4, 8.0.5 and 8.1.7 database. Can you show us a screenshot? Make sure you tell us sqlplus version.


> 15. 命名
  user_cons_columns;
  user_constraints;
  user_rollback_segs;
  它真的要把segment统统缩写为segs吗? 把constraints缩写为cons? 把columns缩写为cols? 不, ORACLE的程序员们想怎么样就怎么样. 他们是觉得单词的全称太长了吗? 不见得, desc dba_users;看一下看看INITIAL_RSRC_CONSUMER_GROUP字段, 看看temporary_tablespace字段.

Abbreviation is usually done when the word is in the middle. DBA_rollback_segs (not user_rollback_segs) is an exception. Anything ending with "_privs" is also exception but we're already used to "_privs".

>  再来看看一下create table:
  create table tname (col1 type,...) storage(initial .. next ..
  minextents .. maxextents ..) ...;
  desc user_tables;
  inital_extent
  next_extent
  minextents
  maxextents
  不要问他们为什么有的用单数有的用复数, 因为他们是ORACLE. 他们想这样.
  dba_tables中owner
  dba_sequences中叫sequence_owner
  user_tab_columns是关于一张表中列信息的, _tab_columns
  user_cons_columns是关于表中字段的约束信息的, _cons_columns

Singular indicates this is for one single item; plural for multiple. Isn't that clear? Initial, next should be singular, max- or min- extents should be plural. I have no problem. You're correct, though, about the "owner" and "sequence_owner" naming confusion.

使用道具 举报

回复
论坛徽章:
113
生肖徽章2007版:羊
日期:2011-10-11 10:20:29生肖徽章2007版:羊
日期:2011-10-11 10:20:29生肖徽章2007版:羊
日期:2011-10-11 10:20:29生肖徽章2007版:羊
日期:2011-10-11 10:20:29生肖徽章:猴
日期:2007-04-10 01:23:40生肖徽章:虎
日期:2011-10-11 10:20:29生肖徽章:羊
日期:2007-08-12 22:22:56生肖徽章:兔
日期:2007-08-15 17:25:14生肖徽章:虎
日期:2011-10-11 10:20:29生肖徽章:虎
日期:2007-09-24 07:24:16
23#
发表于 2004-9-28 09:56 | 只看该作者
收藏!

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
24#
发表于 2004-9-28 11:44 | 只看该作者
在挑毛病中更加加深了对ORACLE的理解,努力学习楼主。。。。

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
25#
发表于 2004-9-28 12:21 | 只看该作者
很多时候是个习惯问题.

使用道具 举报

回复
论坛徽章:
2
行业板块每日发贴之星
日期:2005-03-22 01:02:26授权会员
日期:2005-10-30 17:05:33
26#
发表于 2004-12-1 10:19 | 只看该作者
看看

使用道具 举报

回复
论坛徽章:
7
ITPUB元老
日期:2005-03-31 11:28:36授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB8周年纪念徽章
日期:2009-09-27 10:21:21
27#
发表于 2004-12-1 16:22 | 只看该作者
厉害啊。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
28#
发表于 2005-10-7 14:33 | 只看该作者
take it  down !!! mark it !!!

使用道具 举报

回复
论坛徽章:
0
29#
发表于 2007-3-6 15:55 | 只看该作者
高手啊,有些地方恶心的要命,又不得不听从于他

使用道具 举报

回复
论坛徽章:
6
数据库板块每日发贴之星
日期:2008-03-15 01:04:56ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45数据库板块每日发贴之星
日期:2009-03-28 01:01:05ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:11
30#
发表于 2008-2-29 01:24 | 只看该作者

回复 #6 easyfree 的帖子

看到easyfree与高人的对话,真是佩服啊!

真是天外有天,人外有人!

使用道具 举报

回复

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

本版积分规则 发表回复

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