SQL的高阶用法-SQL函数编程
引子
一般的SQL语句已经能支撑大规模的增删改查了,但有时候我们不仅要查出数据,还要对查出来的数据做进一步的加工,就像编程语言对数据的加工一样,在编程语言中,通过一系列方法,数据从入到出,变成了我们想要的模样,SQL也提供了类似的功能,唯一的区别是,SQL编程没有返回值,你可以直接对查出来的数据进行编程,结果直接展现在数据库中,这种模式叫做 PL SQL,全称Procedure Language SQL
中文:过程化SQL
如果你已有一门编程语言基础,那么以下内容将不费吹灰之力,尽数拿下
目录
PL/SQL简单介绍
PL/SQL(Procedure Language/SQL)(过程语言/SQL)是Oracle对sql语言过程化扩展,把SQL语言的数据操纵能力与过程语言的数据能力结合起来
- 范例:为职工涨工资,没人10%
update emp set sal=sal*1.1
- 范例:为职工涨工资、总裁+1000、经理+800、其他人员400
–>使用pl/sql实现
PL/SQL程序语法
程序语法
declare
说明部分(变量说明、游标申明、例外说明)
begin
语句序列 (DML语句) ..
exception
例外处理语句
End ;
常量和变量定义
变量的基本类型就是oracle中建表时字段的变量,如char,varchar2,date,number,boolean,long)
定义语法:
varl char(15) ;
Psal number(9,2) ;
/*说明变量名、数据类型和长度,分号必给*/
###############################################
/*常量定义*/
marrieed boolean:=true
##############################################
/*引用变量*/
Myname emp.ename%type
/*引用型变量Myname的类型与emp表中ename列的类型一样,在sql中使用into来赋值*/
declare
emprec emp.name%type ;
begin
select t.ename into emprec from emp t where t.empno = 7369 ;
dbms_output.put_line(emprec) ;
/*输出emprec的值*/
end ;
#############################################
/*记录型变量*/
/*Emprec emp%rowtype*/
/*记录变量分量(可以对应Java中的对象类型变量)的引用*/
/*emp rec.ename:='ADAMS';*/
declare
p emp%rowtype;
/*rowtype表emp中的一行当作一个类型*/
begin
select * into p from emp t where t.empno = 7369 ;
dbms_output_put_line(p.ename||''||p.sal) ;
/* ||表示连接 */
end ;
if分支
三种语法
if 条件 then 语句1;
语句2;
end if;
if 条件 then 语句序列1;
else 语句序列 2;
end if ;
if 条件 then 语句;
elseif 语句 then 语句;
else 语句;
end if;
- 范例1:如果从控制台输入1则输出我是1
declare
pnum number :=&num ;
/* :=& * 表示输入并赋值*/
begin
if pnum =1 then
dbms_output.put_line('我是1') ;
end if ;
end ;
- 范例2:如果从控制台输入1则输出我是1否则输出我不是1
declare
pnum number :=&num ;
/* :=& * 表示输入并赋值*/
begin
if pnum =1 then
dbms_output.put_line('我是1') ;
else
dbms_output.put_line('我不是1') ;
end if ;
end ;
- 范例3:判断人的不同年龄段18岁以下是未成年人,18岁以上40以下是成年人,40以上是老年人
declare
mynum number := #
begin
if mynum < 18 then
dbms_output.put_line('未成年人');
elsif mynum >= 18 and mynum < 40 then
dbms_output.put_line('中年人');
elsif mynum >= 40 then
dbms_output.put_line('老年人');
end if;