1.PL/SQL综述本章学习目标,了解如下内容:PL/SQL的功能和作用PL/SQL 的优点和特征;Oracle 10g、Oracle9i 的PL/SQL新特征1.1.SQL简介1.1.1.SQL语言特点SQL语言采用集合操作方式1.1.2.SQL语言分类●数据查询语言(SELECT语句):检索数据库数据。
●数据操纵语言(DML):用于改变数据库数据。
包括insert,update和delete三条语句。
●事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三条语句●数据定义语言(DDL):用户建立、修改和删除数据库对象。
●数据控制语言(DDL):用于执行权限授予和收回操作。
包括grant 和revoke两条命令。
1.1.3.SQL 语句编写规则●SQL关键字不区分大小写●对象名和列名不区分大小写●字符值和日期值区分大小写●书写格式随意1.2.PL/SQL简介1.3.Oracle 10G PL/SQL 新特征2.PL/SQL开发工具本章学习目标:学会使用SQL*PLUS学会使用PL/SQL developer;学会使用Procedure Builder。
2.1.SQL*PLUS在命令行运行SQL*PlusSqlplus [username]/[password] [@server]3.PL/SQL 基础学习目标:●了解PL/SQL块的基本结构以及PL/SQL块的分类;●学会在PL/SQL块中定义和使用变量●学会在PL/SQL块中编写可执行语句;●了解编写PL/SQL代码的指导方针;●了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和BINARY_DOUBLE,以及指定字符串文本的新方法。
3.1.PL/SQL 块简介3.1.1.PL/SQL块结构3.1.2.PL/SQL 块分类匿名块命名块子程序触发器3.2. 定义并使用变量3.2.1.标量变量3.2.2.复合变量3.2.3.参照变量3.2.4.LOB 变量3.2.5.非PL/SQL 变量3.3.编写 PL/SQL 代码3.3.1.PL/SQL 词汇单元分隔符标识符文本(数字文本,字符文本,字符串文本,布尔文本,日期时间文本)注释3.3.2.PL/SQL 代码编码规则标识符命名规则大小写规则代码缩进嵌套块和变量范围PL/SQL中可以使用的SQL函数4.使用SQL语句学习目标:学会使用SELECT语句去完成基本查询功能学会使用INSERT,UPDA TE和DELETE语句去操作数据库数据学会使用COMMIT,ROLLBACK和SA VEPOINT语句去控制事务学会使用SELECT语句去实现各种复杂查询功能(数据分组、连接查询、子查询、层次查询、合并查询等)4.1.使用基本查询处理NULL:函数nvl(expr1,expr2),nvl2(expr1,expr2,expr3)4.2.使用DML语句使用多表插入数据语法:INSERT ALL insert_into_clause [value_clause] subquery;INSERT conditional_insert_clause subquery;示例1:使用ALL 操作符执行多表插入INSERT ALLWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSelect * from emp;示例2:使用FIRST 操作符执行多表插入INSERT FIRSTWHEN deptno=10 THEN INTO dept10WHEN deptno=20 THEN INTO dept20WHEN deptno=30 THEN INTO dept30WHEN job=’CLERK’ THEN INTO clerkELSE INTO otherSELECT * FROM emp;4.3.使用事务控制语句4.3.1.事务和锁4.3.2.提交事务4.3.3.回退事务设置保存点:savepoint a;或者exec dbms_transaction.savepoint(‘a’)取消部分事务Rollback to a;或者Exec dbms_transaction.rollback_savepoint(‘a’)取消全部事务:Rollback; 或者exec dbms_transaction.rollback() 4.3.4.只读事务4.3.5.顺序事务4.4.数据分组4.4.1.分组函数MaxMinAvgSumCountVarianceStddev使用分组函数注意事项:●当使用分组函数时,除了函数Count(*) 之外,其他分组函数都会忽略NULL行。
●当执行select 语句时,如果选择列表同时包含列、表达式和分组函数,那么这些列和表达式必须出现在group by 子句中。
●当使用分组函数时,在分组函数中可以指定all 和distinct 选项。
其中all默认选项,该选项表示统计所有行数据(包括重复行);如果指定distinct,则只会统计不同行值。
4.4.2.GROUP BY 和HA VING4.4.3.ROLLUP 和CUBEROLLUP和CUBE用来产出横向、纵向的统计结果。
示例一:使用ROLLUP操作符:生成横向小计SELECT deptno,job,avg(sal) FROM emp GROUP BY ROLLUP(deptno,job);示例二:使用CUBE操作符:生成数据统计、横向小计、纵向小计结果。
SELECT deptno,job,avg(sal) FROM emp GROUP BY CUBE(deptno,job);示例三:使用GROUPING函数GROUPING函数用于统计结果是否用到了特定列。
Select deptno,job,avg(sal),grouping(deptno),grouping(job)FROM emp GROUP BY cube(detpno,job);4.4.4.GROUPING SETS示例一:显示部门平均工资:SELECT deptno,avg(sal) FROM emp GROUP BY deptno;示例二:显示岗位平均工资SELECT job,avg(sal) FROM emp GROUP BY job;示例三:同时显示部门平均工资和岗位平均工资:SELECT deptno,job,avg(sal) FROM emp GROUP BY GROUPING SETS(deptno,job);4.5.连接查询4.6.子查询4.6.1.单行子查询4.6.2.多行子查询4.6.3.多列子查询SELECT ename,job,sal,deptno FROM emp WHERE (deptno,job)=SELECT deptno,job FROM emp WHERE ename=’SMITH’);4.7.合并查询操作符包括:union,union all,intersect 和minusINTERSECT 操作符用于获取两个结果集的交集。
MINUS操作符用于获取两个结果集的差集。
4.8.其他复杂查询4.8.1.层次查询4.8.2.使用CASE 表达式4.8.3.倒叙查询查看当前数据:SELECT ename,sal FROM emp WHERE ename=’CLARK’;查看历史数据:SELECT ename,sal FROM emp AS OF TIMESTAMP ot_timestamp( ‘2003-05-18 19:59:00’,’YYYY-MM-DD HH24:MI:SS’)WHERE ename=’CLARK’;使用DBMS_FLASHBACK 包获取特定SCN的数据Exec dbms_flashback.enable_at_system_change_num(717402);Select sal from emp where ename=’SCOTT’;Exec dbms_flashback..distableSelect sal from emp where ename=’SCOTT’;4.8.4.使用WITH子句重用子查询通过with 子句可以给子查询指定一个名称,并且使得在一条语句中可以完成所有任务,从而避免了使用临时表。
示例一:显示部门工资总和高于雇员工资总和三分之一的部门名及工资总和(两次使用相同子查询)SELECT dname,sum(sal) as dept_total FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno GROUP BY dnameHAVING sum(sal)>(SELECT sum(sal)*1/3FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno);示例一:显示部门工资总和高于雇员工资总和三分之一的部门名及工资总和(使用with子句重用子查询)WITH summary AS (SELECT dname,sum(sal) as dept_total FROM scott.emp emp,scott.dept dept WHERE emp.deptno=dept.deptno GROUP BY dname)SELECT dname,dept_total FROM summary WHERE dept_total>(SELECT sum(dept_total)*1/3FROM summary )5.SQL函数学习目标:●在SQL语句和PL/SQL 块中使用数字函数;●在SQL语句和PL/SQL 语句中使用字符函数;●在SQL语句和PL/SQL 语句中使用日期函数;●在SQL语句和PL/SQL 语句中使用转换函数;●在SQL语句和PL/SQL 语句中使用Oracle 10g 新增加的集合函数;●在SQL语句中使用分组函数;●了解并掌握Oracle 10g、Oracle 9i 新增加的SQL函数。
5.1.数字函数5.2.字符函数5.3.日期时间函数5.4.转换函数5.5.集合函数5.6.其他单行函数5.7.分组函数5.8.对象函数6.访问Oracle学习目标:●在PL/SQL块中检索单行数据;●在PL/SQL 块中嵌入DML语句;●使用SQL游标属性;●在PL/SQL块中嵌入事务控制语句。