数据库的设计方案
 0.数据库的模型
 层次模型(父子关系)<多个子拥有一个父>
 网状模型(父子关系)<多个子拥有多个父>
 实体关系模型(映射影响)<属性之间的引用关系>
 对象模型
 1.建立数据模型
 业务信息需求=>外模式(业务视图)=>概念模式(系统视图)=>内模式
 2.容器
 顺序 元素
 *************
 顶级 数据库
 ∣ ↓
 ∣ 表
 ↓ ↓
 底级 列
 数据
 行
 3.规范化
 第一范式 除去表中重复的列
 第二范式 除去表中不完全冗余依赖于主键的数据
 第三范式 除去表中完全冗余依赖于其他列或外键的数据
 第四范式 测试表中的每一行是否显示有意义的信息
 第五范式 向 表中放回一定数量的冗余数据,通过避免使用跨表联接来提高性能
 4.计算资源配置问题
 缓冲池,内存
 线程,进程
 相应的SQL语句
 5.编写SQL脚本的翻译
 先实现后编写
 先形象后抽象
 <注意:过程和思想>
 [注意:
 数据库文件 知识
 模型 思想]SQL语言分类<结构化查询语言>
 1.事务处理控制语言 
 <COMMIT,SAVEPOINT,ROLLBACK>
 *****************************************************
 2.DDL数据定义语言 定义(容器:数据库->表->列)的信息
 <CREATE,ALTER,DROP>
 *****************************************************
 3.DCL数据控制语言 管理权限
 <GRANT,REVOKE>
 *****************************************************
 4.DML数据库操作语言 插入/删除/修改数据库中的数据(行)
 <INSERT,SELECT,DELETE,UPDATE>
 *****************************************************
 5.DQL数据查询语言 获取并可排序数据
 *****************************************************
 6.CCL通用语言 高效率的搜索
 模板框架:
 实体对象
 操作语句结构
 作用结果
 流程:
 操作流程与结果相对应
 概念:
 1.锁(行和表)
 表分区(范围,散列,复合<先范围[父]后散列[子]>,列表)
 维护分区(移动,添加,删除,结合,截断,拆分,合并,交换<表空间>)
 同义词(相同意义的词)
 替换(所有者.数据库对象)
 序列(顺序排列)
 视图(查询的结果集)
 联接视图(相互引用的视图)
 键保留表(相对的主键变换)
 主表1(主键1)主表2(主键2,主键1的外键)==>视图(主键3<主键2>,主键1的外键<主键1>)
 索引(唯一,组合,反向键,位图<用逻辑值引用存在的资源>)
 簇(共享数据块的一组表<有相同的列并且包含的数据相同>)
 对象类型
 编码规范:
 执行步骤:
 1.框架(关键字)<全部大写>
 2.空格(分隔)
 3.内容() <全部小写>
 块状结构
 其中的块状可大可小
 使用技术(需要决定技术)
 1.完整性 事务(封装)
 2.锁定 锁定
 3.定位 游标
 4.全文检索 索引
 5.虚拟化 视图
 6.模块化 存储过程(封装)
 7.执行业务规则 触发器
 考虑对象
 数据冗余
 相同
 相似,意义相关<注意:避免删除有用的数据>数据库的组件
 SQL Server
 数据库包含
 主要数据文件
 次要数据文件
 日志文件
 数据库类型
 系统
 master------<主要>
 model-------<模型>
 msdb--------
 tempdb------<临时>
 用户
 pubs--------<寄存>
 Northwind—
 /Oracle///
 物理
 数据库文件或数据文件----
 控制文件----------------
 恢复日志文件------------
 逻辑
 表空间------------------
 段----------------------
 数据区------------------
 模式对象----------------
 **********************************************
 管理<配置数据库选项>
 调用系统存储过程
 EXECUTE 存储过程名 选项参数
 数据库的物理和逻辑一致性进行检查
 DBCC 语句(维护,杂项,状态,验证)
 更改特定信息的当前会话处理
 SET 语句(日期和时间,锁定,杂项,查询执行,SQL-92 设置,统计信息,事务)
 数据完整性
 实体------------主键,唯一约束,标识列
 引用------------外键,检查约束
 域--------------外键,检查约束,默认值定义,NOT NULL属性
 用户定义--------规则,存储过程,触发器
 /
 SELECT TOP 返回行数 列名… AS 列的别名… FROM 对象所有者.表名
 WHERE 条件–筛选行
 GROUP BY列名–查询结果分组
 HAVING 列名–筛选行
 ODBER BY列名 ASC|DESC ;–排序行
 COMPUTE 聚合函数的汇总值(附加到结果集)
 /
 聚合函数
 SUM(总和),AVG(平均),COUNT(计数),MAX(最大数),MIN(最小数)
 模糊查询
 LIKE [列名 LIKE ‘通配符’] --选择其中相似的值
 IN [列名 IN (‘值1’,‘值2’,…)] --选择其中相同的值
 BETWEEN [列名 BETWEEN 数值1 AND 数值2–选择其中范围之间的值
 IS NULL [列名 IS NULL ] --选择其中有空的值
 IS NOT NULL [列名 IS NOT NULL ] --选择其中没有空的值
 表的联接查询
 内联接
 外联接
 左向外联接 <LEFT JOIN 或 LEFT OUTER JOIN>
 右向外联接 <RIGHT JOIN 或 RIGHT OUTER JOIN>
 完整外部联接<FULL JOIN 或 FULL OUTER JOIN>
 交叉联接
 例:
 SELECT 列名… 
 FROM 左表 AS 左表的别名 INNER JOIN 右表 AS 右表的别名
 ON
 左表的别名.左表的列名 = 右表的别名.右表的列名–两表的公共字段
 WHERE 条件 逻辑运算符
 意义: 比较列值(=,<>等)匹配记录Oracle主要数据类型
 Character (Char,Varchar2,long)
 Number ()
 Data (Datatime,TIMESTAMP,INTERVAL DAY TO SECOND,INTERVAL YEAR TO MONTH,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE)
 二进制 (Raw,Long Raw)
 LOBLarge Object 使用约束、默认值和空值
 约束 PRIMARY KEY(主键),FOREIGN KEY(外键),UNIQUE(唯一),CHECK(检查条件) 
 默认值 DEFAULT 定义(DEFAULT 默认值)
 空值 为空性(IS NULL 或 IS NOT NULL)<数值未知性>
 DDL数据定义语言
 CREATE DATABASE 数据库名
 ON [ PRIMARY ]//数据文件
 (
 NAME = logical_file_name ,
 FILENAME = ‘os_file_name’,
 SIZE = size,
 MAXSIZE = { max_size | UNLIMITED },
 FILEGROWTH = growth_increment ]
 )
 LOG ON //日志文件
 (
 NAME = logical_file_name ,
 FILENAME = ‘os_file_name’,
 SIZE = size,
 MAXSIZE = { max_size | UNLIMITED },
 FILEGROWTH = growth_increment ]
 )
 [ FOR LOAD | FOR ATTACH ]
 ///
 CREATE TABEL 对象所有者.表名
 (
 列名 列的数据类型 <约束|默认值|空值>,…
 );
 ALTER TABEL 对象所有者.表名 MODIFY|ADD[修改现有列|添加新列]
 (
 列名 列的数据类型 <约束|默认值|空值>,…
 );
 ALTER TABEL 对象所有者.表名 DROP COLUMN[删除列] 列名;
 //
 CREATE TABEL 对象所有者.表名1
 (
 列名 列的数据类型 <约束|默认值|空值>,…
 )
 外键名 FOREIGN 列名<表名1>
 REFERENCES 对象所有者.表名2(列名<表名2>);
 //
 TRUNCATE TABEL 对象所有者.表名;<删除记录保留结构>
 DROP TABEL 对象所有者.表名;<删除记录和结构>
 DESC TABEL 对象所有者.表名;<查看表结构>
 DML数据库操作语言
 INSERT TABEL 对象所有者.表名
 (列名,…)
 VALUES
 (值,… );

 SELECT |DISTINCT 列名,… [去掉重复的行]
 FROM 对象所有者.表名
 WHERE 条件;
 ///
 INSERT INTO TABEL 对象所有者.表名1(列名,…)
 SELECT |DISTINCT 列名,… [去掉重复的行]
 FROM 对象所有者.表名2;
 ///
 UPDATE 对象所有者.表名
 SET 列名=值,…
 |WHERE 条件;
 ///
 DELETE FROM 对象所有者.表名
 |WHERE 条件;
 事务处理控制语言
 COMMIT 事务名;<提交事务>
 SAVEPOINT 保存点;<保存点>
 ROLLBACK TO SAVEPOINT 保存点;<回滚>
 ROLLBACK 事务名;<回滚事务>
 DCL数据控制语言
 GRANT 权限 ON 对象名 TO 用户名 WITH GRANT OPTION;<授予权限>
 REVOKE 权限 ON 对象名 FROM 用户名; <撤消权限>
 例:
 REVOKE select,update
 ON order_master
 FROM warehouse;Oracle特性
 CREATE TABEL 对象所有者.表名(新)
 AS
 SELECT 列名,…
 FROM 对象所有者.表名(现有);

 CREATE GLOBAL TEMPORARY TABEL 对象所有者.表名(新)<临时表>
 (
 列名 列的数据类型,…
 )
 ON COMMIT DELETE ROWS/PRESERVE ROWS; 

 INSERT TABEL 对象所有者.表名(新)
 (
 SELECT 列名,…
 FROM 对象所有者.表名(现有)
 );
 ///
 SELECT 列名 ALIAS 列的别名,…
 FROM 对象所有者.表名;
 SQLPlus的操作符
 算术(+,-,,/)--------------------------------优先级最高
 连接(||)
 比较(=,!=,<,>,<=,>=,between,in,like,isNull)
 逻辑(NOT,AND,OR)
 [NOT>AND>OR]
 集合(Union,Union all,Intersect,Minus)--------优先级最低
 <从上到下的优先级>
 SQLPlus的函数
 单行函数
 日期,数字,字符,转换,其他,常规
 分组函数
 (Avg,Min,Max,Sum,Stddev,Variance,Count,Count(),Count(列名),Count(distinct 列名))
 (GROUP BY,Having)
 锁定
 行级
 INSERT|UPDATE|DELETE|SELECT …FOR UPDATE OF 锁定的列名;
 INSERT|UPDATE|DELETE|SELECT …FOR UPDATE OF 锁定的列名 WAIT;
 表级
 共享模式 -------LOCK TABLE 对象所有者.表名 IN SHARE MODE | NOWAIT;
 共享更新模式 -------LOCK TABLE 对象所有者.表名 IN SHARE UPDATE MODE | NOWAIT;
 排它锁模式 -------LOCK TABLE 对象所有者.表名 IN EXCLUSIVE MODE | NOWAIT;
 表分区
 分区类型
 范围分区
 CREATE TABEL 对象所有者.表名
 (
 列名 列的数据类型,…
 PARTITION BY RANGE(列名列表)
 (
 PARTITION 分区名1 VALUES LESS THAN(值),
 PARTITION 分区名2 VALUES LESS THAN(值)
 )
 );
 散列分区
 CREATE TABEL 对象所有者.表名
 (
 列名 列的数据类型,…
 PARTITION BY HASH(列名列表)
 (
 PARTITION 分区名1 TABLESPACE 表空间,
 PARTITION 分区名2 TABLESPACE 表空间
 )
 );
 复合分区
 CREATE TABEL 对象所有者.表名
 (
 列名 列的数据类型,…
 PARTITION BY RANGE(列名)
 SUBPARTITION BY HASH(列名列表)
 (
 PARTITION 分区名1 VALUES LESS THAN(值)
 SUBPARTITION 分区名2 TABLESPACE 表空间,SUBPARTITION 分区名2 TABLESPACE 表空间,
 PARTITION 分区名3 VALUES LESS THAN(值)
 SUBPARTITION 分区名4 TABLESPACE 表空间,SUBPARTITION 分区名2 TABLESPACE 表空间,
 )
 );
 列表分区
 CREATE TABEL 对象所有者.表名
 (
 列名 列的数据类型,…
 PARTITION BY LIST(列名列表)
 (
 PARTITION 分区名1 VALUES (‘值1’,‘值2’,…),
 PARTITION 分区名2 VALUES (‘值3’,‘值4’,…)
 )
 );
 维护分区
 移动------------ALTER TABEL 对象所有者.表名 MOVE PARTITION 分区名 TABLESPACE 表空间;
 添加------------ALTER TABEL 对象所有者.表名 ADD PARTITION 分区名 TABLESPACE 表空间 分区类型;
 删除------------ALTER TABEL 对象所有者.表名 DROP PARTITION 分区名 TABLESPACE 表空间;
 结合------------ALTER TABEL 对象所有者.表名 COALESCE PARTITION 分区名 TABLESPACE 表空间;
 截断------------ALTER TABEL 对象所有者.表名 TRUNCATE PARTITION 分区名 TABLESPACE 表空间;
 拆分------------ALTER TABEL 对象所有者.表名 SPLIT PARTITION 分区名 TABLESPACE 表空间 AT(值) INTO 分区1,分区2;
 合并------------ALTER TABEL 对象所有者.表名 MERGE PARTITION 分区名1,分区名2 INTO 分区3;
 交换------------ALTER TABEL 对象所有者.表名 EXCHANGE PARTITION 分区名 WITH TABLE 表;
 数据库对象
 同义词<公有和私有>
 创建 CREATE [PUBLIC] SYNONYM 同义词 FOR 数据库对象;
 删除 DROP [PUBLIC] SYNONYM 对象所有者.同义词;
 序列
 创建 CREATE SEQUENCE 序列
 INCREMENT BY 值—间隔指定值的排序
 START WITH 值—开始值
 MAXVALUE 值—最大值
 MINVALUE 值—最小值
 CYCLE —循环
 CACHE 值;–缓冲
 访问
 序列.NEXTVAL–下一个值
 序列.CURRVAL–当前值
 修改
 ALTER SEQUENCE 序列
 –重新设置(只需部分)
 删除
 DROP SEQUENCE 序列
 视图
 创建 CREATE [OR REPLACE][FORCE|NOFORCE] VIEW 视图
 AS
 SELECT 列名 FROM 表名 WHERE 条件 ORDER BY 列名 DESC|ASC
 [WITH CHECK OPTION CONSTRAINT 约束名]
 [WITH READ ONLY];
 分区视图
 CREATE VIEW 视图
 AS
 SELECT * FROM 分区1
 UNION ALL
 SELECT * FROM 分区2
 UNION ALL
 SELECT * FROM 分区3
 删除
 DROP VIEW 视图
 索引(线索 引导)
 通用创建 
 CREATE INDEX 索引 ON 表名(列名)
 唯一索引
 CREATE UNIQUE INDEX 索引 ON 表名(列名)
 组合
 CREATE INDEX 索引 ON 表名(列名列表)
 反向键
 CREATE INDEX 索引 ON 表名(列名) REVERSE–标准=>反向
 ALTER INDEX 索引 ON 表名(列名) REBULD NOREVERSE–反向=>标准
 位图
 CREATE BITMAP INDEX 索引 ON 表名(列名)
 键压缩
 CREATE INDEX 索引 ON 表名(列名列表) COMPRESS 值
 索引分区
 CREATE INDEX 索引 ON 表名(列名列表)
 [GLOBAL|LOCAL]<全局|本地>
 PARTITION BY RANGE(列名)
 PARTITION VALUES LESS THAN(值) TABLESPACE 表空间,
 PARTITION VALUES LESS THAN(值) TABLESPACE 表空间;
 簇<公用列>
 创建
 CREATE CLUSTER 簇
 (
 列名 列的数据类型
 );T-SQL的结构模型注释
 – 双连字符
 /**/ 正斜线-星号字符对
 声明部分
 DECLARE{
 @局部变量名 数据类型,…
 }
 使用部分
 SET @局部变量名 = 值–单个变量
 SELECT @局部变量名 = 值–多个变量
 SELECT @@全局变量名 --查询环境信息
 控制流语言
 关键字 描述
 BEGIN…END 定义语句块。
 BREAK 退出最内层的 WHILE 循环。
 CONTINUE 重新开始 WHILE 循环。
 GOTO label 从 label 所定义的 label 之后的语句处继续进行处理。
 IF…ELSE 定义条件以及当一个条件为 FALSE 时的操作。
 RETURN 无条件退出。
 WAITFOR 为语句的执行设置延迟。
 WHILE 当特定条件为 TRUE 时重复语句。
 函数
 行集函数
 聚合函数
 标量函数
 函数分类 解释
 配置函数 返回当前配置信息。
 游标函数 返回游标信息。
 日期和时间函数 对日期和时间输入值执行操作,返回一个字符串、数字或日期和时间值。
 数学函数 对作为函数参数提供的输入值执行计算,返回一个数字值。
 元数据函数 返回有关数据库和数据库对象的信息。
 安全函数 返回有关用户和角色的信息。
 字符串函数 对字符串(char 或 varchar)输入值执行操作,返回一个字符串或数字值。
 系统函数 执行操作并返回有关 Microsoft? SQL Server? 中的值、对象和设置的信息。
 系统统计函数 返回系统的统计信息。
 文本和图像函数 对文本或图像输入值或列执行操作,返回有关这些值的信息。
 事务
 启动事务
 显式事务
 BEGIN TRANSACTION
 语句集
 COMMIT TRANSACTION 事务名 或 COMMIT WORK
 |ROLLBACK TRANSACTION 事务名 或 ROLLBACK WORK
 隐性事务
 SET IMPLICIT_TRANSACTIONS ON --启动隐性事务
 语句集
 COMMIT TRANSACTION 事务名 或 COMMIT WORK
 |ROLLBACK TRANSACTION 事务名 或 ROLLBACK WORK
 SET IMPLICIT_TRANSACTIONS OFF–关闭隐性事务
 自动提交事务
 如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。
 结束事务
 COMMIT COMMIT TRANSACTION 事务名 或 COMMIT WORK
 ROLLBACK ROLLBACK TRANSACTION 事务名 或 ROLLBACK WORK

 [注意:设置保存点SAVE TRANSACTION 事务名]
 指定事务边界(确定 SQL Server 事务启动和结束的时间)
 Transact-SQL 语句
 API 函数和方法
 事务处理过程中的错误
 锁定
 SQL Server 可以锁定以下资源(按粒度增加的顺序列出)。

 资源 描述
 RID 行标识符。用于单独锁定表中的一行。
 键 索引中的行锁。用于保护可串行事务中的键范围。
 页 8 千字节 (KB) 的数据页或索引页。
 扩展盘区 相邻的八个数据页或索引页构成的一组。
 表 包括所有数据和索引在内的整个表。
 DB 数据库。
 ---------------------------------------------------
 SQL Server 使用以下资源锁模式。

 锁模式 描述
 共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。
 更新 (U) 用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。
 排它 (X) 用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时对同一资源进行多重更新。
 意向 用于建立锁的层次结构。意向锁的类型为:意向共享 (IS)、意向排它 (IX) 以及与意向排它共享 (SIX)。
 架构 在执行依赖于表架构的操作时使用。架构锁的类型为:架构修改 (Sch-M) 和架构稳定性 (Sch-S)。
 大容量更新(BU) 向表中大容量复制数据并指定了 TABLOCK 提示时使用。
 ---------------------------------------------------
 检测和结束死锁
 SET DEADLOCK_PRIORITY { LOW | NORMAL | @deadlock_var }
 自定义锁超时
 SET LOCK_TIMEOUT timeout_period
 ---------------------------------------------------
 并发问题 隔离级别丢失或覆盖更新。	  <====>未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)。
未确认的相关性(脏读)。  <====>提交读(SQL Server 默认级别)。
不一致的分析(非重复读)。<====>可重复读。
幻像读。 		  <====>可串行读(事务隔离的最高级别,事务之间完全隔离)。---------------------------------------------------
  并发控制
  乐观并发
  悲观并发权限(安全性)<系统存储过程>
 角色
 标准角色
 应用程序角色
 用户帐户
 系统用户
 数据库用户
 管理权限
 授予权限 GRANT
 废除权限 REVOKE
 拒绝权限 DENY(禁止)
 数据查询
 合并多个表中的数据的方法
 联合 合并多个数据表中的行
 子查询 将一个查询包含到另一个查询中<内部查询或内部选择>
 联接 合并多个数据表中的列
 子查询类型
 嵌套子查询 子查询调用另一个子查询
 相关子查询 子查询使用父查询的参数
 [注意:适用的情况]
 联合
 select statement
 UNION[ALL]
 select statement
 索引
 创建索引
 CREATE [ UNIQUE(唯一) ] [ CLUSTERED(聚集索引)| NONCLUSTERED(非聚集索引) ] INDEX 索引名
 ON {表名|视图名} ( 列名 [ ASC | DESC ] [ ,…n ] ) --多个列时为组合索引
 [ WITH
 { PAD_INDEX |
 FILLFACTOR = fillfactor | --填充因子
 DROP_EXISTING | --如果存在则删除它
 }
 ]
 查看索引
 sp_helpindex 表名
 使用索引
 (INDEX = 索引名)
 如:SELECT * FROM 表名 (INDEX = nclindx_ordnum ) WHERE ord_num = ‘P456’
 删除索引
 DROP TABLE 表名.索引名
 全文检索
 全文索引
 CONTAINS CONTAINS(全文索引列名,‘值’)
 FREETEXT FREETEXT(全文索引列名,‘值’)
 全文目录
 存储所有的全文索引
 行集函数(全文检索条件)
 CONTAINSTABLE
 FREETEXTTABLE
 视图
 创建视图
 CREATE VIEW 视图名
 AS
 select_statement(查询语句)
 删除视图
 DROP VIEW 视图名
 游标
 创建游标
 DECLARE 游标名 CURSOR
 [ LOCAL | GLOBAL ] --本地|全局
 [ FORWARD_ONLY | SCROLL ] --只进性|可滚动性
 [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] --静态|键集驱动|动态|只进
 [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] --只读|滚动锁|乐观并发控制
 [ TYPE_WARNING ] --类型转换警告
 FOR select_statement --查询
 [ FOR UPDATE [ OF column_name [ ,…n ] ] ] --更新
 /
 SET @游标变量 = 游标名
 DECLARE @游标变量 CURSOR
 SET @游标变量 = CURSOR SCROLL KEYSET
 FOR select_statement --查询
 使用游标
 OPEN 游标名 --打开游标
 FETCH INTO 游标名 --检索记录
 (FETCH FIRST|NEXT|PRIOR|LAST|ABSOLUTE|RELATIVE INTO)
 CLOSE 游标名 --关闭游标
 DEALLOCATE 游标名 --删除游标引用]
 全局变量(有关游标)
 @@FETCH_STATUS 检索的状态
 @@CURSOR_ROWS 使用游标时的行数不清
 存储过程
 存储过程类型
 系统存储过程 (只能执行)
 用户定义存储过程(创建并执行)
 创建存储过程
 CREATE PROCEDURE 存储过程名 参数列表(@参数 数据类型<输入>|@参数 数据类型 OUT<输出>)
 [WITH RECOMPLE]–重新编译
 AS
 语句集
 RETURN
 GO
 执行存储过程
 EXECUTE 存储过程名 @参数列表<输入> [WITH RECOMPLE]–重新编译
 //
 DECLARE @参数 数据类型[临时寄存]
 EXECUTE @参数列表 = 存储过程名 <输出> [WITH RECOMPLE]–重新编译
 修改存储过程(重新定义)
 ALTER PROCEDURE 存储过程名 参数列表(@参数 数据类型<输入>|@参数 数据类型 OUT<输出>)
 AS
 语句集
 GO
 重新编译存储过程
 EXECUTE sp_recompile 存储过程
 显示错误信息
 RAISERROR(错误信息,严重性级别,状态)
 触发器(触发时执行)
 创建触发器
 CREATE TRIGGER 触发器名--------------<声明>
 ON 表名|视图名
 [ WITH ENCRYPTION ]
 FOR | AFTER | INSTEAD OF-------------<定时>
 INSERT|UPDATE|DELETE-----------------<事件类型>
 AS
 可执行部分;------------------<主体>
 /
 插入表 Inserted 保存插入值后的表
 删除表 Deleted 保存删除值后的表
 级联触发器
 嵌套
 递归
 直接递归
 间接递归
 使用级联触发器
 启用
 sp_configure ‘nested trigger’,1
 禁用
 sp_configure ‘nested trigger’,0PL/SQL的结构模型DECLARE
 声明部分:[表现形式:赋值]
 1.变量和常量名+数据类型 default 默认值;
 2.变量和常量名+数据类型 := 值;
 3.自定义(声明异常)
 异常名 + EXCEPTION;
 标量:基本数据类型
 组合:记录,表,嵌套表,可变数组
 引用:REF CURSOR游标变量和REF操作符
 LOB :BLOB,CLOB,NCLOB,BFILE
 OOP的用户自定义数据类型
 属性:
 %type-------引用数据库中的字段的数据类型(一致性)<一列多行>
 %rowtype----引用数据库中的行 的记录类型 <多列一行>
 BEGIN
 执行部分
 命令和函数
 命令函数
	    
控制结构
	条件
	    1.IF 条件 THEN
	       语句集;
	      ELSE
	       语句集;
	      ENDIF;
	    2.1
	       CASE 条件(语句或表达式)
	      	     WHEN 表达式 THEN 语句集;
	      	     WHEN 表达式 THEN 语句集;
	      	     WHEN 表达式 THEN 语句集;
		 ELSE
		     语句集;
	       END CASE		
	    2.2
	       CASE 
	      	     WHEN 条件 THEN 语句集;
	      	     WHEN 条件 THEN 语句集;
	      	     WHEN 条件 THEN 语句集;
		 ELSE
		     语句集;
	       END CASE						
	循环
	    3.1
	       简单循环
	       LOOP
	             语句集;
	       ENDLOOP;
	    3.2
	       FOR循环
	       FOR 计数器(变量) IN REVERSE 下界..上界
	       LOOP
	             语句集;
	       ENDLOOP;		       
	    3.3
	       WHILE循环
	       WHILE 条件
	       LOOP
	             语句集;
	       ENDLOOP;		       
	顺序
	    4.1
	       GOTO 标签1;
	       GOTO 标签2;
	       <<标签1>>
	       语句集;
	       <<标签2>>
	       语句集;
	    4.2
	       NULL;
引发异常
	RAISE 异常名;EXCEPTION
 异常部分
 异常定义:
 <捕获预定义类型的异常>
 WHEN 异常名 THEN
 语句集;
 WHEN 异常名 THEN
 语句集;
 WHEN OTHERS THEN
 语句集;
 END;异常
 预定义
 WHEN 预定义的异常名 THEN
 语句集;
 非预定义
 声明:异常名(变量名) + EXCEPTION;
 构造:PRAGMA EXCEPTION_INIT(非预定义的异常名,错误号);WHEN 预定义的异常名 THEN
	     语句集;
自定义
	声明:异常名(变量名) + EXCEPTION;
	触发:RAISE 异常名;
	
	WHEN 预定义的异常名 THEN
	     RAISE_APPLICATION_ERROR(错误号,错误信息,TRUE|FALSE);
	     语句集;游标
 静态(编译)
 显式(预声明)
 OPEN 游标名 FOR 查询的结果集
 FETCH 游标名 INTO 变量名
 CLOSE 游标名
 循环游标
 FOR 记录名 IN 游标名 LOOP
 语句集;
 END LOOP;
 隐式(用户声明)
 %NOTFOUND,%FOUND,%ROWCOUNT,%ISOPEN
 REF(运行)
 声明类型:TYPE 游标名 IS REF CURSOR;
 构造类型:游标变量 游标名;子程序
 过程<操作但无返回值>
声明部分****
 [注意:参数有输入和输出]
 CREATE OR REPLACE PROCEDURE 过程名 参数列表(参数 IN|OUT|IN OUT 数据类型)
 IS|AS
 局部的声明部分
 BEGIN
 可执行部分
 EXCEPTION
 异常处理部分
 END;
执行部分****
 EXCECUTE 过程名(参数列表<输入的值和输出的变量的值>)
 函数<操作同时有返回值>
声明部分****
 [注意:参数只输入]
 CREATE OR REPLACE FUNCTION 函数名 参数
 RETURN 数据类型 IS|AS
 局部的声明部分
 BEGIN
 可执行部分
 EXCEPTION
 异常处理部分
 END;
执行部分****
 EXCECUTE 函数名(参数列表<输出的变量的值>)
 嵌套调用
 默认(融合)
 自主(隔离)事务处理
 声明部分:
 PRAGMA AUTOONMOUS_TRANSACTION
 过程|函数的重载
 名称相同+参数(个数和类型)不同
 程序包
 声明
 类型,子程序,游标,异常,变量,常量 <公有>
 程序包体 对↓应
 定义 ↓
 类型,子程序,游标,异常,变量,常量 <公有>
 *********************************************
 声明
 类型,子程序,游标,异常,变量,常量 <私有>
 定义
 类型,子程序,游标,异常,变量,常量 <私有>
 [注意:资源的引用即访问]访问程序包体
 所有者.程序包.类型名
 所有者.程序包.对象名
 所有者.程序包.子程序名(函数|过程)
 内置程序包
 使用
 所有者.程序包.子程序名(函数|过程);
 如:
 DBMS_OUTPUT.Get_line();输入
 DBMS_OUTPUT.Put_line();输出
 触发器(触发时执行)
 CREATE OR REPLACE TRIGGER 触发器名–<声明>
 BEFORE|AFTER|INSTEAD OF-------------<定时>
 INSERT|UPDATE|DELETE----------------<事件>
 ON 表名
 DECLARE
 声明部分;
 FOR EACH ROW|STATEMENT--------------<类型>
 BEGIN
 可执行部分;-----------------<主体>
 [:OLD.列名|:NEW.列名=该列的值]
 END;
 PL/SQL
 TYPE 表类型 IS TABLE OF 类型 INDEX BY BINARY_INTEGER;
 表名 表类型;
 表名(顺序值);
 表名(顺序值):=表达式;
 *******************************************************
 TYPE 记录类型 IS RECORD(列名 数据类型);
 记录名 记录类型;
 记录名.列名;
 记录名.列名:=表达式;
 *******************************************************
 DECLARE
 [CREATE]TYPE 嵌套表 IS TABLE OF 对象类型;
 ---------------------------------------
 CREATE TABEL 对象所有者.表名
 (
 列名 列的数据类型,…
 嵌套表的实例 嵌套表
 )
 NESTED TABLE 嵌套表的实例
 STORE AS 存储嵌套表的表名;
 *******************************************************
 对象表 创建
 (对象类型====>表)
 CRATE TABLE 对象所有者.表名 OF 对象类型;
 对象视图 创建
 (对象类型====>视图)
 CRATE VIEW 对象所有者.视图 OF 对象类型;
 *******************************************************
 TYPE 可变数组 IS VARRAY(最多个数) OF 数据类型(NOT NULL);
 *******************************************************
 集合名.方法名(参数);
 *******************************************************
 声明类型
 CREATE TYPE 类型名 IS|AS OBJECT
 (
 属性名 数据类型,
 …
 …
 MEMBER FUNCTION 函数名<成员>
 MEMBER PROCEDURE 过程名<成员> RETURN 数据类型
 );
 定义类型体
 CREATE TYPE BODY 类型名 IS|AS
 CREATE OR REPLACE FUNCTION 函数名 参数
 RETURN 数据类型 IS|AS
 局部的声明部分
 RETURN 属性名;
 BEGIN
 可执行部分
 EXCEPTION
 异常处理部分
 END;
 CREATE OR REPLACE PROCEDURE 过程名 参数列表(参数 IN|OUT|IN OUT 数据类型)
 IS|AS
 局部的声明部分
 BEGIN
 可执行部分
 EXCEPTION
 异常处理部分
 END;
 *******************************************************
 面向对象编程的特性
 封装 用户名[方案]
 继承 FINAL NOTFINAL INSTANTIABLE NOTINSTANTIABLE UNDER
 多态对象类型
	抽象数据类型
	可变数组
	嵌套表
	对象表
	对象视图
表现方式
	对象名 对象类型;
访问方式
	点分法和表别名
	构造函数法插入记录 ------对象类型(列值列表)
	层次型的访问	   ------用户名[方案].表别名.对象名.包含的列名
				 <抽象数据类型=>基本数据类型>