PL/SQL 学习笔记


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。


2 具体的什么是PL/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 () 

 

 

 

 

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值