一、简介:
pl/sql是面向过程语言与sql语言的结合,它在sql语言中扩充了面向过程的程序结构,如变量和类型、控制语句、过程和函数、对象类型和方法等,实现将过程结构与sql的无缝集成,从而为用户提供了一种功能强大的结构化程序设计语言。
二、pl/sql的组成:
1、数据定义语言(DDL):用于执行数据库任务,对数据库及其中的各种对象进行创建、删除、修改等操作
语句 | 功能 |
create | 创建数据库或数据库对象 |
alter | 修改数据库或数据库对象 |
drop | 删除数据库或数据库对象 |
2、数据操作语言(DML):用于操作数据表中的数据,如查询、修改、增加等操作
语句 | 功能 |
select | 检索表或视图中的数据 |
insert | 插入数据到表或视图中 |
update | 修改表或视图中的数据 |
delete | 删除表或视图中的数据 |
3、数据控制语言(DDL):用于安全管理,确定哪些用户可以查看或修改数据库中的数据
语句 | 功能 |
grant | 授予权限 |
revoke | 收回权限 |
三、使用pl/sql的好处:
有利于客户/服务器环境应用的运行。对于客户/服务器环境来说,真正的瓶颈在网络上。无论网络的传输速度有多快,只要客户端与服务器进行大量的数据交换,应用运行的效率肯定会受到影响。如果使用pl/sql进行编程,将这种具有大量数据处理的应用放在服务器端执行,就可以节省数据在网络中的传输时间。
四、pl/sql编程案例:
1、检查学生表中的某个记录是否存在,存在就更新,如果不存在就插入记录
/*定义变量*/ declare xh varchar2(6):='123456'; xm varchar2(8):='张三'; zxf number(2):=45; /*逻辑块*/ begin /*更新学生表*/ update xsb set xsb.xm=xm,xsb.zxf=zxf where xh='123456'; /*检查记录是否存在,如果不存在就插入记录*/ if sql%notfount then insert into xsb values(xh,xm,zxf); end if; end
2、如果“计算机基础”课程的平均成绩高于75分,则输出“平均成绩高于75分”,否则输出“平均成绩低于75分”
declare v_avg number(4,2); begin select avg(score) into v_avg from xsb,cjb,kcb where xsb.id=cjb.xid and cjb.id=kcb.cid and kcb.name="计算机基础"; if v_avg>75 then dbms_output.put_line('平均成绩高于75'); else dbms_output.put_line('平均成绩低于75'); end if; end;
3、求10的阶乘
//1、用for循环求10的阶乘 declare n number:=1; i number; begin for i in 2..10 loop n:=n*i; end loop; dbms_output.put_line(to_char(n)); end; //2、用wile循环求10的阶乘 declare n number:=1; i number; begin while i<=10 loop n:=n*i; i:=i+1; end loop; dbms_output.put_line(to_char(n)); end; //3、用loop循环求10的阶乘 declare n number:=1; i number:=2; begin loop n:=n*i; i:=i+1; if i>10 then exit; end if; end loop; dbms_output.put_line(to_char(n)); end;
五、在pl/sql中自定义函数
参数的三种模式:
in:表示该参数是输入给函数的参数
out:表示该参数在函数中赋值,并可以传给函数调用程序
inout:表示该参数既可以传值也可以赋值
1、创建函数,根据课程id计算学生的平均成绩
create or replace function abc(cid in char) //参数模式为in,则表示该参数是输入给函数的参数 return number; //返回值类型是number型 as avger number; //定义返回值变量 begin select avg(成绩) into avger from cjb where cjb.cid=cid group by cjb.cid; return(avger); end;
2、调用函数
declare cid char:='20180205'; begin abc(cid); //调用函数 end;
3、删除函数
drop function abc;