专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 浅谈PL/SQL语法

浅谈PL/SQL语法

更新时间:2021-03-12 17:31:57 来源:赢咖4 浏览890次

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的语法学习起来也会事半功倍。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>