1、636目 录第一部分 Oracle SQL*PLUS基础21第一章 Oracle数据库基础211.1 理解关系数据库系统(RDBMS)211.1.1 关系模型211.1.2 Codd十二法则221.2 关系数据库系统(RDBMS)的组成221.2.1 RDBMS 内核221.2.2 数据字典概念221.3 SQL、SQL*Plus及 PL/SQL231.3.1 SQL和SQL*PLUS的差别231.3.2 PL/SQL语言241.4 登录到SQL*PLUS251.4.1 UNIX环境251.4.2 Windows NT和WINDOWS/2000环境271.5 常用SQL*PLUS 附加命令简介
2、291.5.1 登录到SQL*PLUS291.5.2 EXIT和QUIT301.5.3 DESCRIBE(显示表、视图结构)301.5.4 LIST(列出)命令301.5.5 Change(替换字符串)命令311.5.6 Append(追加字符串)命令311.5.7 Save保存当前缓冲区命令到文件311.5.8 GET将命令文件读到缓冲区321.5.9 SPOOL将信息记录到文件中321.5.10 再运行当前缓冲区的命令321.6 常用数据字典简介331.7 ORACLE数据类型341.8 SQL 语句基础381.8.1 SQL语句所用符号381.8.2 简单select 查询391.9 伪
3、列及伪表401.10 使用SQL Worksheet工作40第二章 查询基础442.1 SELECT语句442.2 SQL中的单记录函数442.2.1 单记录字符函数442.2.2 单记录数字函数482.2.3 单记录日期函数542.2.4 单记录转换函数572.2.5 其它的单记录函数602.3 SQL中的组函数652.3.1 多记录组函数652.3.2 带 GROUP BY 的计算672.3.3 用 HAVING 来限制分组的计算672.4 控制和格式化输出682.4.1 用 ORDER BY 子句来对结果进行排序682.4.2 用 BREAK 命令 来对结果进行排列682.4.3 用 C
4、OMPUTE 命令对结果进行格式化702.5 配置会话环境742.5.1 ARRAYSIZE(取回的行数)742.5.2 AUTOCOMMIT(自动提交)752.5.3 LINESIZE(行显示宽度)752.5.4 LONG(长类型显示字节数)752.5.5 PAGESIZE(页行数)752.5.6 PAUSE(暂停)752.5.7 SPACE(列间空格)762.5.8 Termout (启/停屏幕显示)762.5.9 ECHO (启/停命令显示)762.5.10 TRANSACTION (启动事务)772.5.11 SHOW ALL(列出所有参数)772.6 格式化输出792.6.1 一般数
5、据的格式化输出792.6.2 日期的格式化输出802.7 加标题812.8 建立简单报告812.9 输入变量83第三章 表及索引的定义操作863.1 建立表结构863.1.1 建立表结构命令863.1.2 建立表结构例子883.1.3 建立临时表结构893.3 修改表结构903.3.1 修改表结构命令903.3.2 修改表结构例子913.3.3 删除表结构933.3.4 使用CHECK作限制约束933.3.5 使用UNRECOVERABLE创建表943.3.6 将表移动到新的数据段或新的表空间943.3.7 手工分配表的存储空间963.3.8 标记不使用的列和删除不使用的列963.3 主键98
6、3.3.1 创建主键983.3.2 改变主键1013.3.3 删除主键1013.4 外部键1023.4.1 建立外部键1023.4.2 修改外部键1043.4.3 删除外部键1043.5 索引1043.5.1 建立索引1043.5.2 修改索引1063.5.3 删除索引1073.6 新索引类型1073.6.1 基于函数的索引1073.6.2 反向键索引1093.6.3 索引组织表1093.7 抽象数据类型的使用1103.8 大数据类型的使用1113.8.1 可用数据类型1113.8.2 为LOB数据类型指定存储1123.8.3 操作和检索LOB数据1133.9 表和索引有关的数据字典1163.
7、9.1 表和索引数据字典1163.9.2 数据字典查询例子117第四章 视图、同义词和序列1204.1 视图1204.1.1 使用视图来修改表中数据1204.1.2 创建一个新视图1204.1.3 删除一个视图1224.1.4 改变视图1234.2 实体视图(MATERIALIZED VIEW)1234.2.1 创建实体视图1234.2.2 创建实体视图日志1294.2.3 修改实体视图1314.2.4 修改实体视图日志1334.2.45 实体视图完整例子1344.3 序号(sequence)1384.3.1 建立序号1384.3.2 修改序号1394.3.3 使用序号1394.3.4 删除序
8、号1394.4 同义词1404.4.1 建立同义词1404.4.2 删除同义词1414.5 视图、同义词和序列有关的数据字典141第五章 簇与分区1425.1 簇( cluster )1425.1.0 簇概念1425.1.1 建立簇1445.1.2 改变簇1475.1.3 删除簇1475.1.4 删除簇索引1485.1.5 收集簇信息1485.2 分区1505.2.1 分区的优点1505.2.2 分区的方法1515.2.3 创建表的分区1515.2.3 创建索引的分区1565.2.4 维护表分区和索引分区1595.3 簇与分区有关的数据字典1615.3.1 分区、簇数据字典列表1615.3.2
9、 基本的分区、簇信息查询161第六章 使用SQL 进行数据操作1626.1 INSERT操作1626.1.1 用文字插入操作1636.1.2 用子查询插入操作1636.2 UPDATE操作1646.2.1 用文字更新操作1656.2.2 用查询更新操作1656.2.3 用相关子查询更新操作1666.3 DETELE操作1666.3.1 用delete删除全部记录的操作1666.3.2 用delete有条件删除部分记录1676.3.3 用delete分段删除大量记录1676.4 insert、delete及update 的提交和撤消1686.4.1 自动提交的设置1686.4.2 保留点和撤消1
10、69第七章 复杂查询语句的使用1727.1 复杂查询语句的使用1727.1.1 相关子查询1727.1.2 外连接1727.1.3 自我连接1737.1.4 UNION,INTERSECT及MINUS1747.2 创建复杂的视图1757.2.1 分组视图1757.2.2 合计视图1757.2.3 组合视图1767.3 家族树1767.3.1 排除单一体和分枝1767.3.2 遍历至根1777.4 在from 中使用视图179第八章 一些高级的用法1808.1 关于DECODE1808.1.1 DECODE 中的if-then-else逻辑1808.1.2 DECODE 的简单例子1808.1.
11、3 DECODE实现表的转置1818.2 关于访问远程数据库1848.2.1 数据库链接1848.2.2 使用同义词获得本地透明1858.2.3 在视图中使用user伪列1868.2.4 使用COPY功能1878.2.5 管理Oracle名称服务器1888.3 关于上下文的使用1888.3.1 设置上下文选项1888.3.2 为上下文查询设置表1898.3.3 优化文本索引1918.4 关于维数(DIMENSION)1918.4.1 CREATE DIMENSION语法1928.4.2 创建维的例子193第九章 安全管理1959.1 CREATE USER 命令1959.2 建立用户1969.
12、2.1 外部验证(Authenticated )用户1969.2.2 全局(Globally)验证用户-企业验证1969.3 ALTER USER 命令1979.4 DROP USER 命令1979.5 GRANT 命令与REVOKE 命令1989.5.1 GRANT 命令1989.5.2 REVOKE 命令1989.6 权限和角色1999.6.1 建立角色1999.6.2 给角色授权2009.6.3 授权角色给用户2019.7 有关的数据字典2019.7.1 与用户、角色与权限有关的数据字典2019.7.2 查询数据字典信息201第十章 其它一些常见问题及技巧20410.1 一些常见问题20
13、410.1.1 Oracle与2000年问题20410.1.2 如何正确插入日期数据20510.1.3 在查询中只返回满足条件的部分记录20610.1.4 快速大量删除数据Truncate20710.1.5 Rowid的使用20710.1.6 在查询中不让记录被更新20910.1.7 EXCEPTIONS(违反完整性)问题20910.1.8 Not in和Not Exists21010.1.9 关于 COPY命令21010.1.10 列值为NULL情形的处理21110.1.11 使用 product_user_file来限制用户使用产品21210.2 常用技巧21310.2.1 long 类型
14、的查询21410.2.2 如何确定执行时间21410.2.3 如何终止用户会话21410.2.4 用TRANSLATE对数据加密和解密21610.2.5 如何用查询来修改数据21710.2.6 如何产生创建用户的脚本21810.2.7 如何产生创建表结构的脚本21910.2.8 如何产生创建视图的脚本22110.2.9 如何产生创建序号的脚本22110.2.10 如何为用户创建公共同义词221第二部分 Oracle PL/SQL基础223第十一章 PL/SQL 程序设计简介22311.1 概述22311.2 SQL与PL/SQL22311.2.1 什么是PL/SQL?22311.2.1 PL/
15、SQL的好处22411.2.1.1 有利于客户/服务器环境应用的运行22411.2.1.2 适合于客户环境22411.2.1.3 客户及服务器端的好处22411.2.2 PL/SQL 可用的SQL语句22511.3 运行PL/SQL程序22511.4 PL/SQL内置包226第十二章PL/SQL 块结构和组成元素22712.1 PL/SQL结构22712.2 PL/SQL块22812.3 标识符22812.4 PL/SQL 变量类型22912.4.1 变量类型22912.4.2 复合类型(记录和表)23012.4.3 使用%ROWTYPE23212.4.4 LOB类型23212.4.5 用户定
16、义的子类型23312.4.6 数据类型的转换23512.5 运算符和表达式(数据定义)23512.5.1 关系运算符23512.5.2 一般运算符23612.5.3 逻辑运算符23612.6 变量赋值23712.6.1 字符及数字运算特点23712.6.2 Boolean 赋值23712.6.3 数据库赋值23712.6.4 可转换的类型赋值23812.7 变量作用范围以可见性24012.8 注释24012.9 简单例子24112.9.1 简单数据插入例子24112.9.2 简单数据删除例子241第十三章PL/SQL 处理流程24213.1 条件语句24213.2 循环24313.3 标号和G
17、OTO24613.4 NULL 语句247第十四章 光标的使用24714.1 光标概念24714.1.1 处理显式光标24714.1.2 处理隐式光标24914.2 光标循环25014.2.1 简单循环25014.2.2 WHILE循环25114.2.3 光标 FOR 循环25214.2.4 关于NO_DATA_FOUND和%NOTFOUND25214.2.5 SELECT FOR UPDATE 光标25314.3 光标变量25414.3.1 声明光标变量25414.3.2 为光标变量分配存储空间25414.3.3 打开光标变量25414.3.4 关闭光标变量25414.3.5 光标变量例子2
18、5514.3.6 光标变量257第十五章 错误处理25915.1 异常处理概念25915.1.1 预定义的异常处理25915.1.2 触发异常情态26015.1.3 处理异常情态26115.1.4 用户定义的异常处理26215.2 异常情态传播26315.2.1 在执行部分引发异常情态26315.2.2 在声明部分引发异常情态26415.3 异常处理编程26515.4 在 PL/SQL 中使用 sqlcode,sqlerrm265第十六章 存储过程和函数26816.1 引言26816.2 存储过程26816.2.1 创建过程26816.2.2 使用过程27016.2.3 开发存储过程步骤271
19、16.2.3.1 编辑存储过程源码27116.2.3.2 对存储过程程序进行解释27116.2.3.3 调试源码直到正确27116.2.3.4 授权执行权给相关的用户或角色27116.2.4 与存储过程相关数据字典27216.3 创建函数27316.4 过程和函数中的例外处理27416.4.1 使用系统定义的例外处理27416.4.1.1 没有例外处理的缺点27516.4.1.2 使用预定义的例外处理27516.4.2 使用用户定义的例外处理+27816.4.2.1 定义的用户例外处理27816.4.2.2 使用户EXCEPTION_INIT处理27816.4.2.3 使用户raise_app
20、lication_error处理278第十七章 创建包和使用包27917.1 引言27917.2 包的定义28017.3 包的开发步骤28117.4 包的头部说明28117.5 包体的说明28217.6 删除过程、函数和包28517.7 包的管理28517.7.1 包有关的数据字典28517.7.2 包中无效对象的查询和编译28617.7.3 包源代码的导出288第十八章 触发器28918.1 触发器类型28918.1.1 DML触发器28918.1.2 替代触发器29018.1.3 系统触发器29018.2 创建触发器29018.2.1 创建DML触发器29118.2.2 创建替代(Inst
21、ead_of)触发器29218.2.3 创建系统触发器29218.2.4 触发器触发次序29418.2.5 使用触发器谓词29418.3 删除和使能触发器29518.4 创建触发器的限制29618.5 变异表29718.5.1 变异表典型例子29918.5.2 变异表错误的处理30018.6 触发器数据字典与管理30118.6.1 触发器数据字典30118.6.2 无效触发器的编译302第十九章 外部存储过程30319.1 什么是外部例程30319.2 C外部例程30319.2.1 调用步骤30419.2.2 参数映射( 转换)309第二十章 会话间通信31120.1 DBMS_PIPE311
22、20.1.1 发送消息31120.1.2 接收消息31220.1.3 示例31320.2 DBMS_ALERT33220.2.1 使用警告33320.2.2 警告所用的各个过程33320.2.3 警告例子33420.3 DBMS_PIPE 和 DBMS_ALERT335第二十一章 数据库作业和文件I/O33621.1 数据库作业33621.1.1后台进程33621.1.2运行作业33621.1.3失效作业33821.1.4删除作业33921.1.5修改作业参数34021.1.6与作业参数有关数据字典34221.2 文件I/O34221.2.1 安全性34321.2.2 打开和关闭文件34321
23、.2.3文件输出34521.2.3文件输入34621.2.4文件操作例子346第二十二章 在PL/SQL 使用SQL语句34722.1在PL/SQL 使用DML语句34722.2 伪列34922.3 GRANT、REVOKE 和权限35022.3.1 对象和系统权限35022.3.2 GRANT和REVOKE命令语法35022.4 事务控制35122.4.1 COMMIT 和 ROLLBACK35122.4.2 保留点 SAVEPOINT35222.5 在PL/SQL中使用SQL函数35322.5.1 错误处理函数35422.5.2 数字函数354第二十三章 PL/SQL程序的测试和调试355
24、23.1 问题诊断35523.1.1 调试指南35523.1.2 显示在编译产生的错误35523.2 插入测试表35623.3 DBMS_OUTPUT的使用35623.4 PL/SQL调试器35723.4.1 Procedure Builder调试器35723.4.2 SQL-Station调试器35823.5 程序设计方法35823.5.1 模块化程序设计35823.5.2 自顶向下设计35823.5.3 数据抽象358第二十四章 性能及其它问题35924.1共享池35924.1.1 共享池工作原理35924.1.2 估计共享池大小36024.1.3 将PL/SQL 驻留在共享池中36124
25、.2 SQL 语句调整36224.3 网络问题36524.4 PL/SQL wrap(转换器)36524.4.1 运行 wrap实用程序36524.4.2 输入和输出文件36624.5 DBMS_OUTPUT的使用366第二十五章 对象类型36825.1 对象类型定义36825.1.1 定义对象类型头36825.1.2 定义对象类型体36825.1.3 定义对象类型例子36925.1.4 初始化对象类型37025.1.5 使用对象类型37125.2 对象类型修改37325.3 对象类型删除373第二十六章 动态PL/SQL简介37526.1 概述37526.1.1 静态SQL和动态SQL375
26、26.1.2 用DBMS_SQL 包实现动态37526.1.3 用本地动态SQL实现动态37726.2 使用DBMS_SQL进行动态编程37726.2.1 执行DML、DDL及Alter session语句37726.2.2 示例38026.2.3 执行DDL 语句38126.2.4 执行PL/SQL 块38226.4 本地动态SQL38326.4.1使用EXECUTE IMMEDIATE语句38326.4.2向后兼容情况38426.4.3指定参数模式385第二十七章 LOB和DBMS_LOB包简介38627.1 LOB类型一般使用38627.1.1 LOB类型存储38727.1.2 临时LO
27、B类型38727.1.3 LOB类型的接口38827.2 一般LOB表与数据加载38827.2.1 建立包含LOB的表38827.2.2 用EMPTY_CLOB或EMPTY_BLOB插入LOB39027.2.3 一般的LOB插入39127.3 内部LOB和DBMS_LOB的使用39127.3.1 APPEND过程39227.3.2 CLOSE过程39327.3.3 COMPARE函数39327.3.4 COPY过程39527.3.5 ERASE过程39727.3.6 GETCHUNKSIZE函数39827.3.7 GETLENGTH函数39927.3.8 INSTR函数40127.3.9 RE
28、AD过程40227.3.10 SUBSTR函数40327.3.11 WRITE过程40427.3.12 WRITEAPPEND过程40527.4临时LOB40627.4.1 建立临时LOB40627.4.2 查看临时LOB40727.4.3 释放临时LOB40727.4.4 从BFILE中加载临时LOB40827.4.5 查看临时LOB是否打开40827.4.6 显示临时LOB数据40927.4.7 从临时LOB读数据41027.4.8 从临时LOB读部分数据41127.4.9 比较两个临时LOB数据41227.4.10 查看临时LOB模式的存在41327.4.11 得到临时LOB的长度414
29、27.4.12 拷贝部分临时LOB数据41427.4.13 为临时LOB拷贝位置41527.4.14 加临时LOB到另外的LOB41627.4.15 写追加到临时LOB41727.4.16 写数据到临时LOB41727.4.17 修理临时LOB数据41827.4.18 删除临时LOB数据41927.5外部LOB (BFILE)41927.5.1 BFILE目录指定41927.5.2 建立包括BFILE列的表42027.5.3 用BFILENAME()插入数据42127.5.4 从另外表选择BFILE插入数据42227.5.5 用初始化BFILE位置来插入数据BFILE行42227.5.6 动态
30、加载数据BFILE的表42227.5.7 用BFILE数据来加载LOB数据42327.5.8 用FILEOPEN打开BFILE42427.5.9 用OPEN打开BFILE42427.5.10 用FILEISOPEN看BFILE是否打开42427.5.11 用ISOPEN看BFILE是否打开42527.5.12 显示BFILE42527.5.13 从BFILE中读数据42627.5.14 读部分BFILE42627.5.15 比较BFILE42727.5.16 判断BFILE是否存在模式42727.5.17 判断BFILE是否存在42827.5.18 得到BFILE长度42827.5.19 拷贝
31、BFILE的LOB位置42927.5.20 得到目录别名和文件名字42927.5.21 用初始化BFILE位置更新BFILE43027.5.22 用FILECLOSE关闭BFILE43027.5.23 用CLOSE关闭BFILE43027.5.24 用CLOSEALL关闭所有BFILE43127.5.25 用DELETE等删除BFILE数据43127.6 使用SQL*loader加载LOB43127.6.1 加载图象和文本文件43127.6.2 加载文本文件432第二十八章 PL/SQL编程技巧43528.1用触发器实现日期格式的自动设置43528.2如何避免TOO_MANY_ROWS错误43
32、628.3如何解决TOO_MANY_ROWS问题43928.4如何在PL/SQL中使用数组44028.5如何使用触发器完成数据复制44128.6在PL/SQL中实现Truncate44228.7如何导出存储过程、触发器的代码443附录A:SQL及SQL*PLUS 命令参考452%FOUND453%ISOPEN453%NOTFOUND454%ROWCOUNT455%ROWTYPE456%TYPE456(+)457 (“at” 号)457458ABS458ACCEPT459ACOS459ADD_MONTHS460ALTER CLUSTER460ALTER DATABASE461ALTER FUNC
33、TION462ALTER INDEX462ALTER PACKAGE463ALTER PROCEDURE463ALTER PROFILE464ALTER RESOURCE COST464ALTER ROLE465ALTER ROLLBACK SEGMENT465ALTER SEQUENCE466ALTER SESSION466ALTER SNAPSHOT467ALTER SNAPSHOT LOG468ALTER SYSTEM468ALTER TABLE469ALTER TABLESPACE470ALTER TRIGGER471ALTER TYPE471ALTER USER472ALTER VI
34、EW473ANALYZE473APPEND474ASCII474ASIN475ATAN475ATAN2476AUDIT476AVG477BFILENAME477BLOCK478BTITLE479CEIL480CHANGE481CHARTOROWID481CHR482CLEAR482CLOSE483COLUMN483COMMENT484COMMIT485COMPUTE485CONCAT486CONCATENATE486CONNECT BY487CONVERT487COPY488COS489COSH489COUNT490CREATE CLUSTER490CREATE CONTROLFILE491C
35、REATE DATABASE492CREATE DATABASE LINK493CREATE PROFILE493CREATE DIRECTORY494CREATE FUNCTION494CREATE INDEX495CREATE LIBRARY496CREATE PACKAGE496CREATE PACKAGE BODY497CREATE PROCEDURE499CREATE ROLE500CREATE ROLLBACK SEGMENT500CREATE SCHEMA501CREATE SEQUENCE502CREATE SNAPSHOT502CREATE SNAPSHOT LOG503CR
36、EATE SYNONYM504CREATE TABLE504CREATE TABLESPACE506CREATE TRIGGER507CREATE TYPE508CREATE TYPE BODY509CREATE USER509CREATE VIEW510CURRVAL511CURSOR_ALREADY_OPEN511DATATYPE512DATATYPE CHAR512DATATYPE DATE513DATATYPE FLOAT513DATATYPE LONG513DATATYPE LONGRAW514DATATYPE MLSLABEL514DATATYPE NUMBER514DATATYP
37、E RAW515DATATYPE ROWID515DATATYPE VARCHAR515DATATYPE VARCHAR2515DECLARE516DECODE516DEFINE517DEL517DELETE518DEREF519DESCRIBE519DROP CLUSTER520DROP DATABASE LINK520DROP DIRECTORY521DROP FUNCTION521DROP INDEX521DROP LIBRARY522DROP PACKAGE522DROP PROCEDURE523DROP PROFILE523DROP ROLE524DROP ROLLBACK SEGM
38、ENT524DROP SEQUENCE525DROP SNAPSHOT525DROP SNAPSHOT LOG525DROP SYNONYM526DROP TABLE526DROP TABLESPACE527DROP TRIGGER527DROP TYPE528DROP TYPE BODY528DROP USER529DROP VIEW529DUMP530DUP_VAL_ON_INDEX530EDIT531EMPTY_BLOB531EMPTY_CLOB532EXCEPTION INIT Pragma532EXECUTE533EXISTS533EXIT534EXIT535EXIT-WHEN535
39、EXP536EXPLAIN PLAN536FETCH537FLOOR538FOR-LOOP538FORMAT539FORMAT DATE539FORMAT NUMBER540GET540GLB541GOTO541GRANT542GREATEST543GREATEST_LB543HEXTORAW544HOST544IF-THEN545IF-THEN-ELSE545IF-THEN-ELSEIF546INITCAP547INPUT547INSERT548INSTR548INSTRB549INTERSECT550INVALID_CURSOR550INVALID_NUMBER551KEYWORDS552LABELS553LAST_DAY554LEAST554LEAST_LB555LENGTH555LENGTHB555LIKE556LIST557LN558LOCK TABLE558LOG559LOGIN_DENIED559LOOP560LOWER561LPAD561LTRIM562LUB562MAKE_REF563MAX563MIN564MINUS564MOD