http://blog.csdn.net/spark998/article/details/2065269
http://love-flying-snow.iteye.com/blog/573083 -- oracle分析函数
http://www.blogjava.net/hhhaaawwwkkk/archive/2008/11/13/240328.html --CASE
1 SQL(数据定义语言) 和PL/SQL的区别:
答:SQL是结构化查询语言,比较接近自然语言,使用SQL,只需要说干什么,不需要说怎么干。由数据定义语言、数据操纵语言、数据控制语言构成,它不面向过程,即前一条语句与后一条语句无关。SQL是标准的语。PL/SQL,Oracle对SQL标准的扩充,增加了面向过程的功能,所以可以用来编写存储过程、存储函数、触发器等等。 PL/SQL是结构化SQL,就是在标准SQL中加入了IF...ELSE... For....等控制过程的SQL。
PL/SQL(Procedural Language/SQL)是对SQL的扩充,它吸收了近年来编程语言的许多最高设计特点:如数据封装性、信息隐蔽性、重载和例外处理等。它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言。
PL/SQL的优点如下:
1.块结构(Block Structure)
PL/SQL是块结构语言,意味着程序可以分成若干逻辑块,各自包含那个单元里要求的逻辑语言资源。可以对块宣布本地变量,在块中使用这些变量,可在它们应用的块中特别地处理错误条件(叫做Exceptions)
相关书籍: oracle pl/SQL从入门到精通
什么是dual Oracle中:
“
1. dual 确实是一张表.是一张只有一个字段,一行记录的表.
2.习惯上,我们称之为'伪表'.因为他不存储主题数据.
3. 他的存在,是为了操作上的方便.因为select 都是要有特定对象的.
如:select * from mytable ;
select * from myview;
等等.
但如果我们不需要从具体的表来取得表中数据,而是单纯地为了得到一些我们想得到的信息,并要通过select 完成时,就要借助一个对象,这个对象,就是dual;
如我们要计算 999*999 的值,可以用:
select 999*999 from dual;
来实现;
要拼接一个电话信息:
select concat('010-','88888888')||'转23' 高乾竞电话 from dual;
就变成了我们想要的格式输出.
4.当然,我们不一定要dual ,也可以这样做.例如:
create table mydual( dummy varchar2(1));
也可以实现和dual 同样的效果:
select 999*999 from mydual;
不过,dual 我们都用习惯了,就无谓自己再搞一套了.
”
动态语句:
1, 请问什么是动态SQL语句,
--望文生意,动态生成的SQL
2, 什么时候用动态SQL语句,
--当查询中的栏位,表或者条件等不确定,或者是变量时,就需要使用动态SQL,因为此时,无法写出静态的(也就是固定的)SQL.
3, 语法有什么要求?
--语法和静态SQL是一致的.没有特殊要求
4, 另外,如果SQL语句本身包含单引号', 怎么处理 呢?
--单引号在动态SQL里面使用两个单引号来处理,
Example:
declare @name sysname
set @name='sysobjects'
exec ('select * from '+@name+' where type = ''U'' and crdate < getdate()')
SQL的软,硬解析 :
Procedures:
Packages:
Functions:
Trigger:
Analytic Functions: 30 -40种; over函数 = 开窗户函数: “selectrow_num () over (partition by order by)”; 和具体函数联合使用
//max salary
Select *, max (salary) over(partition by deptID order by 1) from EMP;
//third salary
Select * from ()
//排序
Row_number “1 2 3 4”
Rank “1 1 3 4”
Dense_rank “1 1 2 3”
//行间关系 example: 薪水最相近的人 1位旁边的2位
Lead ()
//该行上一位
Lag ()