——驳《Oracle--毛病篇》
前言:
“师者,所以传道授业解惑也 。”
首先,无论是作者的怨言还是切身感受,无论是早期的想法还是执着至今,我们今日权当技术探讨,为曾经迷惑或即将迷惑的人提供参考。
我与前文作者小赵素未谋面,但为其在技术领域的专注而感动,故落笔挥墨,简单处一带而过。
以下题号相同,可以与上篇文章同阅,不再赘述。
1、SQLPLUS只是一个客户端软件,不要指望它会继续什么,不用说serverout、pagesize,就是修改了时间显示格式,也不能被其他用户继续,这正是基于SESSION的好处啊。当然,假如你愿意永久修改些什么,可以通过修改数据字典、配置文件或注册表完成。
2、命令行编辑功能?
ORACLE调整的是缓冲区,EDIT可以实现大部分,好的治理员仍然以.SQL的脚本为主,单独的命令行少用为妙。虽然我对SQLPLUS的设计也没什么好感,但也觉得没必要弃一豹而争一斑。
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-PROCEDURELANGUAGE,过程性语言,没有说编译,没有面向对象。至于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标准的,ADDCOLUMN,不用COLUMN是因为其他没有什么可以ADD,但DROP必须加COLUMN,是因为此要害字还可以是CONSTRAINT,ORALCE没有错。
15、又回到命名的问题上了?
ORACLE的命名取舍原则是:常用的对象名或列名要简单,很少使用的名称要复杂,这是符合大多数人习惯的,尤其是ORACLEDBA,否则,一概而论反倒缺省人性化,为DBA造成沉重负担。
后话:
肯定的说,作者的后话才是大彻大悟,说出奋斗的感觉。每一种产品,都会有优缺点,不然怎么会有后人的聪明?“人类在一个fortran语言大行其道的年代就已经登上了月球”,古人就知道善假于物也,我们可能不是爱因斯坦,但我们可以是牛顿,可以有众多可以借鉴的肩膀。ORACLE博大精深,在于她的思想和数据库的理论,不是虚张声势的外表。程序员不可多得,不是他学会多少语言。人是一个综合体,要挖掘潜在的能量,就要从不同角度入手,找到最适合自己的开发方式,使之终有一番作为。选择,并不意味着放弃原有,数据库如此,而勤奋和聪明,你又能舍弃哪一个呢?