sqlplus基本属性配置方法Word格式.docx
《sqlplus基本属性配置方法Word格式.docx》由会员分享,可在线阅读,更多相关《sqlplus基本属性配置方法Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
![sqlplus基本属性配置方法Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/21/e49d9445-15ba-4484-ab81-07d18bbfe706/e49d9445-15ba-4484-ab81-07d18bbfe7061.gif)
2、col列名formatAn
n代表n位字符(n为大于零的整数),An表示将此列的数据显示宽度限制为不超过n位。
2Oracle是C/S(Client/Server)结构的大型数据库,主要语言是4GLSQL语言,具有功能强大而简单易学的优点。
C/S结构的工作过程是:
当客户端(C端)输入并发送一条SQL语句后,便通过网络送到服务器端(S端),在那里被分析执行然后再将结果通过网络返回到客户端,此时客户端可以再发下一条SQL语句。
可见,客户端是一条语句一条语句的发送,服务器端是一条一条的分析执行,结果再一次次的返回。
但是,这样单个的SQL语句引起了频繁的网络通信,大大降低了系统性能。
PL/SQL是扩展SQL后的语言,PL/SQL块作为一个单位发送,使用了较少的网络通信,而且在运行中能根据条件,决定执行或重复执行什么语句,既保留了SQL的强大性,又弥补了不足。
1 提高程序的运行速度
1.1 使用存储过程
存储过程是Oracle数据库的一种对象,是一种带名的PL/SQL过程程序块,它在创建后,被数据库服务器进行语法和句法分析,以编译了的形式存储在数据库中,可以被有权用户在任何需要的地方调用。
当客户端应用程序调用时,只需发送一条调用命令,数据库服务器就会执行该过程。
与一般的PL/SQL块主要的不同是:
无需在网上传送大量的源程序代码,只传送一条调用命令,这就大大降低了网络通信的负担;
而且只在刚创建时分析编译一次,每次调用直接执行编译了的代码,因此运行速度较快。
在实际开发时,对于具有共同特性的功能模块最好使用存储过程,调用时通过使用不同的实际参数值来实现某一具体的处理。
如果能充分利用存储过程来完成应用系统的操作与处理,则可大大提高系统的运行性能。
1.2 编写可重用共享池中已有语句的SQL语句
共享内存缓冲区和后台进程合称为一个Oracle实例。
当启动一个Oracle实例时,会有许多的Oracle后台进程被启动,每个进程都负责运行数据库的不同方面的处理,各进程通过共享内存彼此之间进行通信,该块内存就是系统全局区SGA。
SGA被分隔为不同的区域,其中一个称作共享池(SharedPool)的区域中包含了发送给数据库的SQL语句的正文和PL/SQL块,以及它们经过分析后的表示形式与执行方案,其中执行方案是数据库实际处理该语句的方法,例如,需要访问哪些表和索引、是否需要执行排序操作等等。
因为要执行一条SQL语句,数据库就必须确定其执行方案。
当数据库从客户应用程序接收到一条SQL语句时,它首先检查是否该语句在共享池中。
若在,那么不重新对其分析而是重复使用已经在共享池中的形式及执行方案;
若不在,则对该语句进行分析,得到新的分析形式与执行方案并进行存储,覆盖共享池中以前的内容。
由此可以看出,编写可重用共享池中语句的SQL语句就显得十分必要,因为避免不必要的重新分析,会很大程度上减小服务器所承担的工作量。
要想重复使用共享池中的语句,就应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致。
下面推荐一种有效实用的方法。
1.2.1 SQL语句各部分的格式
一条语句可以一行也可以分多行书写,但最好换行书写,每一子句一行,且每行的第一个关键字与第一行的关键字的尾部对齐,这样做以确保每次使用同一条语句时分行的位置一致,而不要让语句在第80列偶然溢出到下一行,例如下面的格式中字母T、M、E、D、P是对齐的,一子句占了一行:
SELECTcol1,col2
FROMtable—name1
WHEREcol1>
col2
ANDcol2>
col3
GROUPBYcol1;
当刚执行过上述语句后,若又接收到下面的语句:
FROMtable—name2
GROUPBYcol2;
则通过检查认为与共享池中的语句一致,可重复使用共享池中的执行方案,不必重新分析。
而下面的的语句被认为是不同的,因为分行的位置不同,需要重新进行分析。
SELECTcol1,col2FROMtable—name2
GROUPBYcol1;
1.2.2 字母大小写采用一致约定
关键字、保留字大写,用户声明的标识符小写。
请看下面的两条语句:
SELECTxm
FROMstudent;
与
selectxm
比较的结果是这两句不匹配或者说不等价,因为第一句中的SELECT是大写的,而第二句的是小写的。
1.2.3 其它,如运算符两侧各留一个空格等
总之,设计自己的编写约定并遵守这些约定,使要处理的语句与共享池中的相一致,有助于运行性能的提高。
2 提高可维护性
2.1 编写触发器
对表中数据进行修改、删除或插入是非常常见的操作。
当表被修改时,应该自动给其他需要执行操作的程序发信号。
触发器可以完成这一功能。
在Oracle8中,触发器是一段程序,但是这段程序是当发生INSERT、UPDATE或DELETE操作时被自动执行的,与过程的调用(是通过调用语句调用执行)不同,因此当某事件的发生引起连环更新或其他的相应操作时,通过自动执行触发器代码实现而不用人工干预,大大减轻了维护工作,同时也很好的保证了数据的一致性。
触发器的优点是自动激发,不管什么引起数据修改(来自程序的或是来自用户的),它们都工作,所以常常用于不同数据表中的相关数据的串接修改。
采用这种方法实现数据表间接的数据关联可由数据库集中维护控制,规则变化时只需修改相应的触发器即可,这样系统易于维护,提高了工作效率。
2.2 使用%TYPE、%ROWTYPE方式声明变量
程序设计中常常要通过变量来实现程序间的数据传递,即将表中数据赋值给变量,或是把变量值插入到表中。
而要完成这些操作的前提就是,表中数据与变量类型要一致。
然而在实际中,表中数据或类型、或宽度有时要变化,一旦变化,就必须去修改程序中的变量声明部分,否则程序将不能正常运行。
为了减少这部分程序的修改,编程时使用%TYPE、%ROWTYPE方式声明变量,使变量声明的类型与表中的保持同步,随表的变化而变化,这样的程序在一定程度上具有更强的通用性。
3 提高程序自检能力
一个好的应用系统不仅要有好的用户界面、齐全的功能处理模块,而且要有很强的错误处理能力。
因此要求编程人员要预测可能的各种情况(声明异常情态并引发),并尽可能从错误中恢复过来(编写相应异常情态处理器代码),这就是Oracle8中的异常部分的程序设计内容。
然而这部分的设计绝非易事。
在异常部分的最后设置OTHERS异常情态处理器是个很好的编程习惯,因为它为运行时刻捕捉到的其它错误指明了处理去向,从而保证了程序的正常运行。
格式如下:
BEGIN
…
EXCEPTION
WHENexcep—name1THEN
…
WHENexcep—name2THEN
WHENOTHERSTHEN
END;
但是对程序中出现的错误要做到正确的处理(即正确选择异常处理器并执行它),还必须弄清楚异常情态的传播问题。
异常情态的传播指的是当在程序块的声明、执行、异常部分分别出现异常情态时,或在本块中没有相应的异常处理器时会将这个异常情态传播到哪里,会去激发那个块中的处理器。
传播规则是这样的:
当一个异常情态是在块的执行部分引发的(最常见的),PL/SQL使用下面的规则确定激活哪个异常处理器。
(1)若当前块对该异常情态设置了处理器,则执行它并成功完成该块的执行,然后控制转给包含块。
(2)若当前块没有该处理器,则通过在包含块中引发它来传播异常情态。
然后对包含块执行步骤1。
另外,无论是在声明部分引发了一个异常情态,还是在异常处理部分引发,则该异常情态将立即传播给包含块。
在包含块引用上述规则进行异常情态的处理,即使在当前块设置了OTHERS处理器也不会被执行。
4 易于阅读
.对于子程序、触发器、包等带名的程序块,使用结束标识。
例如:
CREATEORREPLACEPROCEDUREaddstudIS
ENDaddstud;
/*此处的过程名add是可选的,写上较好,与块开始的CREATE相对应*/
.采用统一的标识符命名规则。
对于诸如变量名、子程序名、触发器名等数据库对象命名时,应尽量能表示其功能用途或含义。
.对于过程性语句与程序块采用缩进书写风格,会使得程序结构清晰、层次分明、易阅读。
.采用统一的字母大小写。
尽管PL/SQL程序中不区分大小写,但是采用统一的字母大小写(如前文叙述的大小写约定)将在很大程度上提高程序的可阅读性。
.加注释。
.一条语句分多行书写,不让其自动分行。
这方面的内容大家都已很熟悉,不再详述了。
总之,良好的程序设计风格,可以在多个方面提高系统的性能,提高开发效率,很值得我们在工作中给以重视。
3
Oracle8中用户名、表名、列名、索引名...可以用中文命名吗?
∙软件环境:
1、WindowsNT4.0+ORACLE8.0.4
2、ORACLE安装路径为:
C:
\ORANT
∙解释说明:
可以,例如:
SQL>
createuser用户1identifiedby密码;
grantconnect,resourceto用户1;
connect用户1/密码
createtable表1(列1number,列2date);
createindex索引1on表1(列1);
dropindex索引1;
droptable表1;
4
Oracle中如何实现某一字段自动增加1?
∙实现方法:
建立一个最小为1,最大为999999999的一个序列号会自动循环的序列
createsequence序列名
incrementby1
startwith1
maxvalue999999999
cycle;
当向表中插入数据时,SQL语句写法如下:
insertinto表名values(序列名.nextval,列1值,列2值);
5
SQL(StructuredQueryLanguage)语句分哪几类?
∙系统环境:
1、数据库:
Oracle8iR3(8.1.7)forNT企业版
∙说明:
∙DDL、数据定义语言:
create、alter、drop、truncate(创建、修改结构、删除、截断)(其他:
rename)
∙DML、数据操纵语言:
insert、delete、select、update(增、删、查、改)
∙DCL、数据控制语言:
grant、revoke(授权、回收)、setrole
∙事务控制:
commit、rollback、savepoint(其他:
locktable、setconstraint(s)、settransaction)
∙审计控制:
audit、noaudit
∙系统控制:
altersystem
∙会话控制:
altersession
其他语句:
comment(添加注释)、explainplan、analyze(收集统计)、validate、call
6
SQL*PLUS常用命令列表
1、Windows98第二版
2、Oracle数据库版本为:
PersonalOracle7Release7.3.4.0.0
3、Oracle安装路径为:
\ORAWIN95
∙命令列表:
∙假设当前执行命令为:
select*fromtab;
∙(a)ppend 添加文本到缓冲区当前行尾 aorderbytname 结果:
select*fromtaborderbytname;
∙ (注:
a后面跟2个空格)
∙(c)hange/old/new在当前行用新的文本替换旧的文本 c/*/tname 结果:
selecttnamefromtab;
∙(c)hange/text 从当前行删除文本 c/tab 结果:
selecttnamefrom;
∙del 删除当前行
∙deln 删除第n行
∙(i)nput文本 在当前行之后添加一行
∙(l)ist 显示缓冲区中所有行
∙(l)istn 显示缓冲区中第n行
∙(l)istmn 显示缓冲区中m到n行
∙run 执行当前缓冲区的命令
∙/ 执行当前缓冲区的命令
∙r 执行当前缓冲区的命令
∙@文件名 运行调入内存的sql文件,如:
∙SQL>
edits<
回车>
∙如果当前目录下不存在s.sql文件,则系统自动生成s.sql文件,
∙在其中输入“select*fromtab;
”,存盘退出。
@s<
∙系统会自动查询当前用户下的所有表、视图、同义词。
∙@@文件名 在.sql文件中调用令一个.sql文件时使用
∙save文件名 将缓冲区的命令以文件方式存盘,缺省文件扩展名为.sql
∙get文件名 调入存盘的sql文件
∙start文件名 运行调入内存的sql文件
∙spool文件名 把这之后的各种操作及执行结果“假脱机”即存盘到磁盘文件上,默认文件扩展名为.lst
∙spool 显示当前的“假脱机”状态
∙spooloff 停止输出
∙例:
spoola
spool
∙正假脱机到A.LST
spooloff
∙当前无假脱机
∙exit 退出SQL*PLUS
∙desc表名 显示表的结构
∙showuser 显示当前连接用户
∙showerror 显示错误
∙showall 显示所有68个系统变量值
∙edit 打开默认编辑器,Windows系统中默认是notepad.exe,把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑
∙edit文件名 把当前目录中指定的.sql文件调入编辑器进行编辑
∙clearscreen 清空当前屏幕显示
7
SQL*Plus系统环境变量有哪些?
如何修改?
∙show和set命令是两条用于维护SQL*Plus系统变量的命令
∙SQL>
showall--查看所有68个系统变量值
showuser--显示当前连接用户
showerror --显示错误
setheadingoff--禁止输出列标题,默认值为ON
setfeedbackoff--禁止显示最后一行的计数反馈信息,默认值为"
对6个或更多的记录,回送ON"
settimingon--默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能
setsqlprompt"
"
--设置默认提示符,默认值就是"
setlinesize1000--设置屏幕显示行宽,默认100
setautocommitON--设置是否自动提交,默认为OFF
setpauseon--默认为OFF,设置暂停,会使屏幕显示停止,等待按下ENTER键,再显示下一页
setarraysize1--默认为15
setlong1000--默认为80
∙说明:
∙long值默认为80,设置1000是为了显示更多的内容,因为很多数据字典视图中用到了long数据类型,如:
descuser_views
∙列名可空值否类型
∙-------------------------------------------
∙VIEW_NAMENOTNULLVARCHAR2(30)
∙TEXT_LENGTHNUMBER
∙TEXTLONG
definea='
'
2000010112:
01:
01'
--定义局部变量,如果想用一个类似在各种显示中所包括的回车那样的常量,
∙--可以用define命令来设置
select&
afromdual;
∙原值1:
afromdual
∙新值1:
select'
fromdual
∙'
2000010112:
01
∙-----------------
∙2000010112:
8