pl/sql编程语言

对sql语言的扩展,主要用来编写存储过程和存储函数等。
declare
i number(2) := 10 //定义一个int类型的变量i,:=表示赋值操作。
ena emp.ename%type; //引用型变量 一个字段
emprow emp%rowtype; //记录型变量 行(对象)
begin
dbms_output.put_line(i); //输出
select ename into ena from emp where empno=1;//使用into语句赋值
select * into emprow from emp where empno=1
在这里插入图片描述
end;
pl/sql的if判断语句
在这里插入图片描述
declare
i number(3):=ⅈ //输入一个值要用&
begin
if i<18 then
dbms_output.put_line(‘未成年’);
elseif i<40 then
dbms_output.put_line(‘中年人’);
else
dbms_output.put_line(‘老年人’);
end if;
end;

pl/sql的loop循环
在这里插入图片描述
declare
i number(2):=1;
begin
while i<11 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
exit循环(退出循环)
declare
i number(2):=1;
begin
loop
exit when i>10;
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
for循环
declare
for i in 1…10 loop
dbms_output.put_line(i);
end loop;
end;
游标:可以存放多个对象,多行记录。
declare
cursor c1 is select * from emp;
emprow emp%rowtype;
begin
open c1;
loop
fetch c1 into emprow;
exit when c1%notfound;
dbms_output.put_line(emprow.ename)
end loop;
close c1;
end;
给指定部门员工涨工资:
declare
cursor c2(eno emp.deptno%type) is select empno from emp where deptno=eno;
en emp.empno%type;
begin
open c2(10);
loop
fetch c2 into en;
exit when c2%notfound;
update emp set sal=sal+100 where empno=en;
commit;
end loop;
close c2;
end;
**存储过程:
**
在这里插入图片描述
create or replace procedure p1(eno emp.empno%type)
is
begin
UPDATE EMP SET SAL=SAL+100 WHERE EMPNO=ENO;
COMMIT;
end;
测试p1
declare
begin
p1(10)
end;
*存储函数:
在这里插入图片描述
//通过存储函数计算指定员工的年薪:
//存储过程和存储函数的参数不能带长度
//存储函数的返回值类型不能带长度
create or replace fnction f_yearsal(eno emp.empno%type) return number
is
s number(10);
begin
select sal * 12+nvl(comm,0) into s from emp where empno=eno;
return s;
end;
//测试
//存储函数在调用的时候返回值需要接收
declare
begin
s:=f_yearsal(7788);
end;
///out类型参数如何使用
//使用存储过程来计算年薪
create or replace procedure p_yearsal(eno emp.empno%type,yearsal out number)
is
s number(10);
c emp.comm%type;
begin
select sal
12,nvl(comm,0) into s,c from emp where empno=eno;
yearsal:=s+c;
end;
//测试
declare
yearsal number(10);
begin
p_yearsal(7788,yearsal );
end;
in和out类型参数的区别:
凡是涉及到into查询语句赋值或者:=赋值操作的参数,都必须使用out来修饰。
存储过程和存储函数的区别:
1.语法的区别
关键字不一样 procerdure,function
2.存储函数比存储过程多了两个return
本质区别:存储函数有返回值,而存储过程没有返回值。
如果存储过程想实现有返回值的业务,我们就必须使用out类型的参数
即便是存储过程使用了out类型的参数,其本质也不是有了返回值,而是在存储过程内部给out类型参数赋值,执行完毕后,我们直接拿出。
我们可以使用存储函数有返回值的特性,来自定义函数。
而存储过程不能用来自定义函数。
在这里插入图片描述
触发器:
在这里插入图片描述在这里插入图片描述
//语句级触发器
create or replace trigger t1
after
insert
on person
declare
begin
dbms_outptu.put_line(‘一个新员工入职’);
end;
insert into person values(1,‘小红’);
commit;
select * from person;
//行级触发器
create or replace trigger t2
before
update
on emp
for each row
declare
begin
if :old.sal>:new.sal then
raise_application_error(-20001,‘不能给员工降薪’);
//触发t2
在这里插入图片描述
使用触发器实现主键自增
分析:在用户做插入操作之前,拿到即将插入的数据,给该数据中的主键列赋值。
行级触发器
create or replace trigger auid
before
insert
on person
for each row
declare
begin
select s_person.nextval into :new.pid from dual; //拿到该表的下一个主键
end;
java调用存储过程和存储函数
在这里插入图片描述
在这里插入图片描述
java调用存储过程
在这里插入图片描述
java调用存储函数
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值