Oracle SQLPLUS基础及sqlplus命令详解.docx
- 文档编号:5352044
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:41
- 大小:40.93KB
Oracle SQLPLUS基础及sqlplus命令详解.docx
《Oracle SQLPLUS基础及sqlplus命令详解.docx》由会员分享,可在线阅读,更多相关《Oracle SQLPLUS基础及sqlplus命令详解.docx(41页珍藏版)》请在冰点文库上搜索。
OracleSQLPLUS基础及sqlplus命令详解
OracleSQLPLUS基础及sqlplus命令详解
作者:
蛰龙铖 出自:
人心就是江湖浏览/评论:
111/1 日期:
2009年6月3日16:
08
OracleSQL*PLUS基础
Oracle的SQL*PLUS是设计所有应用系统的基础工具。
要想将应用系统设计成一个健壮的、性能优越的系统。
最关键的是要理解RDBMS的真正含义和结构,理解OracleSQL*PLUS的特点和核心,弄清关系数据库与桌面数据库的差别。
比如理解数据的完整性、一致性、索引、视图等。
只有这样才能设计出符合Oracle特点的应用系统。
从而保证系统在提供使用后不会出现一致性、性能等问题。
§1.1理解关系数据库系统(RDBMS)
CODASYL(数据系统语言协会)是数据库任务组(DatabaseTaskGroup,DBTG)创建的一种数据库标准,这是一种基于COBOL的网络数据库标准。
§1.1.1关系模型
一个描述两个集合的元素如何相互联系或如何一一对应的数学概念,对于数据库来说,关系只是一个带有一些特殊属性的表。
所以有:
l数据的基础项是关系
l在这些表上的操作只产生关系
一个关系表必须符合某些特定条件,才能成为关系模型的一部分
l储存在单元中的数据必须是原子的。
每个单元只能存储一条数据,叫信息原则(InformationPrinciple)。
如果存储多条则违反信息原则。
特舒情况下可能需要违反信息原则。
l储存在列下的数据必须具有相同的数据类型。
l每一行是唯一的(没有完全相同的行)。
l列没有顺序。
l行没有顺序
l列有一个唯一性的名称。
关系模型的另一个是完整性原则。
它包括实体完整性原则(Entityintegrityrule)和引用完整性原则(Referentialintegrityrule),如:
l主键(Primarykey)是能唯一标识行的一列或一组列的集合。
l由多个列构成的主键称为连接键(Concatenatedkey)、组合键(Compoundkey),或称作为复合键(Compositykey)。
另外就是外部键(Foreignkey)是一个表中的一列或一组列,它们在其它表中作为主键而存在。
一个表中的外部键被认为是对另外一个表中主键的引用。
实体完整性原则简洁地表明主键不能全部或部分地空缺或为空,引用完整性原则简洁地表明一个外键必须为空或者它所引用的主键当前存在值相一致。
§1.1.2Codd十二法则
Oracle数据库系统是一个完美的完全符合数据库技术的关系数据库系统。
要想你的应用设计按照数据库原理来进行,最重要的就是理解Oracle的结构、语句和命令。
Codd提出的十二条法则在Oracle系统中都可以找到:
1)信息法则。
2)授权存储法则,每一个数据项都通过“表名+行主键+列名”的组合形成访问。
3)必须以一致的方法使用空值。
4)一个活跃的、在线数据字典应作为关系型表被储存
5)必须提供数据存取语言进行存取访问。
6)所有能被更新的视图应当是可被更新的。
7)必须有集合级的插入、更新和删除。
8)物理数据的独立性。
即应用不依赖物理结构。
9)逻辑数据的独立性。
如果一个表被分成两个部分,则应用视图连接在一起,以便不会对应用产生影响。
10)完整性的独立性。
完整性规则应该储存在数据字典中。
11)分布独立性。
一个数据库即使被分布,也应该能工作。
12)非破坏性原则。
如果允许低级存取,一定不能绕过安全性和完整性原则。
§1.2关系数据库系统(RDBMS)的组成
RDBMS由两部分组成,即数据库系统内核(软件)和数据字典(内核用于管理数据库系统的数据结构)两部分。
§1.2.1RDBMS内核
RDBMS就是用来控制数据访问的操作系统。
它的任务是按照一定的规则存储数据、检索数据及保护数据。
§1.2.2数据字典概念
数据自动存放数据库中所有对象(如表,索引,视图等)所需的信息。
Oracle8i的数据字典是存放数据库系统信息的一组表,从数据字典中的信息可以确认数据库中数据对象的基本信息及存放位置。
§1.3SQL、SQL*Plus及PL/SQL
下面用简单的语言解释Oracle的常用产品所包含的SQL*PLUS和PL/SQL的关系。
§1.3.1SQL和SQL*PLUS的差别
SQL是标准结构查询语言,而SQL*PLUS实际是包括标准的SQL和Oracle公司的一些命令组成的产品,因而Oracle公司将其取名为SQL*PLUS。
下面是它们的解释。
1.SQL(StructuredQueryLanguage)
SQL有许多关键字,以下语句是常用于开头的语句:
AlterInsert
AuditLock
CommitNoaudit
CommentRename
CreateRevoke
DeleteSelect
DropUpdate
GrantValidate
注:
1.Oracle的SQL缓冲区一次只能存放一条SQL命令;
2.Validate(使生效)在oracle中跟Enable一起用,但可以省去Validate,所以许多资料都不介绍Validate的用法。
其语法如:
Enable{[Validate][Novalidate]}{[UNIQUE][PRIMARYKEY]...}...
2.SQL*PLUS
除SQL外,SQL*PLUS还包括称为SQL*PLUS命令的附加命令,这些命令主要用于形成复杂报表,编辑SQL命令,提供帮助信息,维护系统等。
SQL*PLUS包括的命令如下:
@Connect
HostSet
#Copy
InputShow
$Define
ListSpool
/Del
NewpageSqlplus
AcceptDescribe
PauseStart
AppendDisconnect
QuitTiming
BreakDocument
RemarkTtitle
BtitleEdit
PromptUndefine
ChangExecute
PrintSave
ClearExit
RunColumn
GetRunform
ComputeHelp
3.DDL(DataDefineLanguage)
对于结构查询语言(有时称SQL命令),可以将它们分成两组,一组是数据定义语言(DDL);另一组是数据操纵语言(DML)。
其中用于数据定义的语言如下:
Alterprocedure重编译过程
Altertable修改表的属性
Analyze统计数据库对象性能值
AltertableaddConstraint对已有的表加约束
Createtable建立表结构
Createindex建立索引
Droptable删除表实体及相关的索引
Dropindex删除索引
Grant授权给用户或角色
Truncate删除表中的所有行
Revoke从用户或角色收回权限
4.DML(DataManipulationLanguage)
对于结构查询语言的另一组是数据操纵语言(DML)。
DML其中用于数据操纵的命令如下:
Insert
Delete
Update
Select
Commitwork
Rollback
§1.3.2PL/SQL语言
PL/SQL是OracleRDBMS(Oracle6之后版本)的一个组成部分,PL是“过程化语言(ProcedureLanguage)”的缩写。
PL/SQL语言是在SQL语言中结合了结构化过程语言成分的准第四代语言。
使用PL/SQL的目的:
由于大多数PL/SQL是在服务端来运行,这样可减少由客户端运行程序时所需的网络数据流量。
可以使用PL/SQL的地方:
lPL/SQL可以单独进行程序的编写,完成一般的处理功能;
l在高级语言中可嵌入PL/SQL块;
l在4GL中可以嵌入PL/SQL块;
l在PL/SQL程序中可以嵌入HTML和XML。
§1.4登录到SQL*PLUS
我们创建任何对象,如创建表、索引等都需要连接到Oracle中,这里用“登录”主要是Oracle的界面提供的是Login这样的叫法。
其实就是连接的意思。
在Client/Server结构下,Oracle提供两种方式连接SQL*PLUS,其中SQL*NETV2.x版本(目前版本不再使用SQL*NETV2.x)提供在字符方式下连接到SQL*PLUS,SQL*NETV2.x版本提供在图形方式(Window)使用,目前版本的ORACLE8/8i都使用NET8连接.(NET8不再支持字符终端)
§1.4.1UNIX环境
在UNIX下,要确保客户端或服务器端与Oracle服务器系统进行连接,必须保证tnsnames.ora和listener.ora两个参数文件的正确配置。
详细的配置解释在DBA章节里解释。
下面是tnsnames.ora和listener.ora两个参数文件的内容显示。
1.tnsnames.ora参数文件:
INST1_HTTP=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=SHARED)
(SERVICE_NAME=s450)
(PRESENTATION=http:
//admin)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
S450=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=s450)
)
)
2.listener.ora参数文件:
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521))
)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))
)
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=/home/oracle/app/oracle/product/8.1.7)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=s450)
(ORACLE_HOME=/home/oracle/app/oracle/product/8.1.7)
(SID_NAME=s450)
)
)
如果安装后已经正确地对上面的两个参数文件进行配置,则可以按照下面步骤进行登录:
1)先启动服务器端监听器:
lsnrctlstart
2)用下面命令显式登录到SQL*PLUS:
$sqlplususername/password
或
$SQLPLUSusername/password@connect_string
3)用下面命令隐式登录到SQL*PLUS:
$sqlplus[enter]
Enterusername:
scott
Enterpassword:
******
§1.4.2WindowsNT和WINDOWS/2000环境
在NT/2000环境下,要使客户端能与Oracle服务器进行连接,tnsnames.ora和listener.ora参数文件的配置如下:
1.tnsnames.ora参数文件:
ORA816.TAIJI.COM.CN=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=zhao)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=ora816)
)
)
EXTPROC_CONNECTION_DATA.TAIJI.COM.CN=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
S450=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=s450)
)
)
2.listener.ora参数文件:
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=zhao)(PORT=1521))
)
)
(DESCRIPTION=
(PROTOCOL_STACK=
(PRESENTATION=GIOP)
(SESSION=RAW)
)
(ADDRESS=(PROTOCOL=TCP)(HOST=zhao)(PORT=2481))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=D:
\oracle)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=ora816)
(ORACLE_HOME=D:
\oracle)
(SID_NAME=ora816)
)
)
WindowsNT/2000字符方式登录步骤:
1)先启动服务器端监听器:
lsnrctlstart
2)用下面命令显式登录到SQL*PLUS:
$sqlplususername/password
或
$SQLPLUSusername/password@connect_string
WindowsNT/2000图形方式登录步骤:
1)点击“开始”=》“程序”=》“Oracle–OraHome81”=》“ApplicationonDevelopment”=》“SQLPlus”进入如下屏幕:
在WINDOWSNT/98/2000上的登录界面(sqlplus图)
可以在用户名框内输入用户、口令及主机字串;也可以分别进行输入。
§1.5常用SQL*PLUS附加命令简介
Oracle公司提供的附加语句(或称命令),可以满足程序人员和管理员的一些特殊操作要求。
比如,在显示超过上百行记录信息时,可以采用每屏“暂停”来实现。
要达到这样的目的,就要在SQL>下发setpauseon命令。
由于SQL*PLUS命令较多,下面仅给出最常用的几个命令的说明,详细的请参考附录。
§1.5.1登录到SQL*PLUS
可以用下面命令登录到SQL*PLUS,SQL*PLUS命令的简单语法如下:
SQLPLUS[[logon]|[start]]
logon可以是:
{username[/password][@connect_identifier]|/}[AS{SYSOPER|SYSDBA}]
|/NOLOG
注1:
SQLPLUS主要是在命令方式下使用,在NT、WINDOWS/2000、UNIX的用法都一样。
注2:
如果在UNIX下,SQLPLUS命令不被识别(不存在),则问题在环境变量PATH没有设置正确或者没有设置。
SQLPLUS可执行程序在$ORACLE_HOME/bin目录下。
§1.5.2EXIT和QUIT
可以用exit或quit来终止SQL*PLUS的操作(会话)。
语法如下:
{EXIT|QUIT}[SUCCESS|FAILURE|WARNING]
{EXIT|QUIT}可以用exit或quit,目前它们的功能一样。
SUCCESS正常退出
FAILURE带提示错误代码的退出
WARNING带提示警告代码的退出
COMMIT退出前将未提交进行保存
例如:
SQL>exit
§1.5.3DESCRIBE(显示表、视图结构)
DESCRIBE可以用(只要用DESC即可)来显示表、视图的列的定义,也可以显示同义词、函数或存储过程的说明。
语法如下:
DESC[RIBE]{[schema.]object[@connect_identifier]}
Schema:
用户名,如果省去,则为对象的所有者。
object
可以是表(table),视图(view),类型(type),存储过程(procedure),函数(function),包(package)或同义词(synonym)
@connect_identifier
数据库连接字串
例:
显示emp表的结构:
SQL>descemp
§1.5.4LIST(列出)命令
可以用LIST命令来列出当前SQL缓冲区中的一行或多行命令语句。
L[IST][n|nm|n*|nLAST|*|*n|*LAST|LAST]
n列出第n行
nm列出n到m行
n*列出第n行到当前行
nLAST列出第n行到最末行
*列出所有行
*n列出当前行到第n行
*LAST列出当前行到最末行
LAST列出最末行
例:
SQL>LIST
1SELECTENAME,DEPTNO,JOB
2FROMEMP
3WHEREJOB=’CLERK’
4*ORDERBYDEPTNO
§1.5.5Change(替换字符串)命令
可以用Change命令来改变字符串(即替换字符串)。
语法如下:
C[HANGE]sepcharold[sepchar[new[sepchar]]]
Sepchar为分隔符,可以是”/”或”!
”--请使用者特别注意
Old旧字串
New新字串
例:
将除号(/)改为乘号(*),则需要命令为c!
/!
*!
。
即:
SQL>l
1*selectsal,sal/100fromemp
SQL>c!
/!
*!
提醒:
对于修改/字符的只能用!
来作分隔符(上例)。
例:
将乘号(*)改为加号(+),则需要命令为c!
/!
*!
。
即:
SQL>l
1*selectsal,sal*100fromemp
SQL>c/*/+/
1*selectsal,sal+100fromemp
SQL>
§1.5.6Append(追加字符串)命令
可以用Append命令来完成在当前行的末尾追加字符串。
语法如下:
A[PPEND]text
Text所要求追加的字符串
例:
在当前行selectsal,sal+100fromemp后加wheresal>=2000,则:
SQL>l
1*selectsal,sal+100fromemp
SQL>awheresal>=2000
1*selectsal,sal+100fromempwheresal>=2000
SQL>
§1.5.7Save保存当前缓冲区命令到文件
可以用SAVE命令将当前的命令行保存到操作系统的文件中。
语法如下:
SAV[E]filename[.ext][CRE[ATE]|REP[LACE]|APP[END]]
其中:
filename:
你将把缓冲区中的内容存入到操作系统目录的文件名。
ext:
若使用文件后缀,缺省的文件后缀为SQL。
例:
SQL>selecttable_namefromdictwheretable_namelike‘%ROLE%’;
SQL>savec:
\get_role
§1.5.8GET将命令文件读到缓冲区
可以用GET命令将操作系统的目录下的命令文件读到缓冲区(但不执行)。
语法如下:
GETfilename[.ext][LIS[T]|NOL[IST]]
其中:
filename:
希望加载到SQL缓冲区的文件名
ext:
文件的扩展名,缺省为SQL.
例:
SQL>getc:
\get_role
§1.5.9SPOOL将信息记录到文件中
Oracle的SPOOL命令可以实现将屏幕所出现的一切信息记录到操作系统的文件中直到SPOOLOFF为止。
语法如下:
SPO[OL][filename[.ext]|OFF|OUT]
其中:
filename:
你想输出(spool)的文件名。
ext:
文件的后缀。
缺省的后缀是LST(或LIS)。
SQL>coltable_namefora20
SQL>colcommentsfora80
SQL>setlinesize110
SQL>SPOOlc:
\all_dict
SQL>selecttable_name,commentsfromdict;
......(系统查询信息)
SQL>SPOOLOFF
§1.5.10再运行当前缓冲区的命令
在SQL>方式下,如果希望在运行当前的命令,可用Run(或R)或用/来实现,如:
SQL>setlin120
SQL>selecttable_namefromdictwheretable_namelike'%ROLE%';
TABLE_NAME
------------------------------
DBA_ROLES
DBA_ROLE_PRIVS
USER_ROLE_PRIVS
ROLE_ROLE_PRIVS
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
SESSION_ROLES
已选择7行。
SQL>l
1*selecttable_namefromdictwheretable_nam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle SQLPLUS基础及sqlplus命令详解 SQLPLUS 基础 命令 详解