更新时间:2021-03-12 17:31:57 来源:极悦 浏览955次
PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,通过逻辑判断、循环等操作实现复杂的功能或者计算。MySQL 不支持 PL/SQL ,但支持Navicat Premium。那么接下来带大家领略一下PL/SQL语法微妙之处。
1、声明方法
declare
i number(2) := 10; -- 定义变量2位长度的数字类型i,赋值为10。 := 为赋值运算符
s varchar2(10) := '小明 '; -- 定义变量字符变量s
ena emp.ename%type; -- 定义类型与emp表ename字段同类型的ena变量
emprow emp%rowtype; -- 记录型变量begin
dbms_output.put_line(i); -- 输出变量i
dbms_output.put_line(s || '上午好'); -- '小明上午好',||是连接符end;
2、if判断
declare
i number(3) := ∈ -- &in 是执行代码后输入的值begin
if i<18 then
dbms_output.put_line('少年');
elsif i<40 then
dbms_output.put_line('中年')
else
dbms_output.put_line('老年')
end if;end;-- elsif ... then 与 else 不是必需的
3、loop循环
-- 如同最常见的while语句
declare
i number(2) := 1;begin
while i<10 loop -- 开始循环
dbms_output.put_line(i);
i := i+1;
end loop; -- 结束循环end;
-- 等于while(true)语句中加条件declare
i number(2) := 1;begin
loop
exit when i>10;
dbms_output.put_line(i);
i := i+1;
end loop;end;
-- 如同for in循环declarebegin
for i in 1..10 loop -- 遍历1-10
dbms_output.put_line(i);
end loop;end;
4、游标
declare
cursor c1 is selset * from emp; -- 定义一个游标并将emp标所有数据存入其中
emprow emp%rowtype; -- 定义记录型变量(与emp一行记录相同类型)emprowbegin
open c1; -- 打开游标
loop
fetch c1 into emprow; -- 等于 for i in obj, i是emprow,c1是obj
exit when c1%notfound; -- c1取不到值的时候退出
dbms_output.put_line(emprow.ename); -- 输出每行的ename属性值
end loop;
close c1; -- 关闭游标end;
5、存储过程
已近提前编译好的一段PL/SQL,可以直接调用。类似于函数。
-- 语法create procedure 过程名(参数 数据类型)is -- 也可以使用as,等效begin
用PL/SQL 做的事end;
-- 给指定员工涨100create or replace procedure payrise(eno emp.empno%type) -- or replace 如果存在payrise,会修改它isbegin
update emp set sal=sal+100 where empno = eno;
commit;end;-- p1(7788) 调用存储过程,传入 7788 参数
6、存储函数
-- 语法create function 函数名(参数名 类型,参数名 类型,...) return 数据类型isbegin
return(结果变量);end 函数名;
-- 通过存储函数实现指定员工的年薪create or replace function salaycalc(eno emp.empno%type) return number()is
s number(10)begin
select sal*12+nvl(comm,0) from emp where empno = eno;
return send;-- s := salaycalc(7788) 调用时必须有变量接收它的值
存储过程与存储函数的区别:
1)关键字不同
2)存储函数比存储过程多两个return
3)存储函数天生有返回值存储过程天生没有
7、触发器
指定一个规则,在做增删改操作的时候,只要满足这个规则就自动触发。触发器分为:
语句级触发器
不包含for each row ,反之是行级触发器
行级触发器
包含for each row 就是行级触发器,使用它是为了使用 :old 或 :new 或 记录
触发语句与伪记录的的关系
发器实现主键自增
create or replace trigger auid
beforeinserton ersonfor each rowdeclare
begin
select s_person.nextval into :new.pid from fual;end;
PL/SQL使用的数据库操作语言还是基于SQL的,所以熟悉SQL是进行PL/SQL编程的基础。而且,PL/SQL语法和SQL语法也有很多共通之处,在本站的PL/SQL教程中,有各个PL/SQL语法的应用实例,我们再结合SQL的语法学习起来也会事半功倍。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习