快速理解存储函数、存储过程、触发器
存储过程、存储函数、触发器
一、创建存储过程
1、创建存储过程
create procedure isertEmp as
begin
insert into emp values(9888,'www','SDF',null,null,null,500,20);
commit;
end;
/
2、创建或替换存储过程
create or replace procedure isertEmp as
begin
insert into emp values(9888,'www','SDF',null,null,null,500,20);
commit;
end;
/
3、存储过程的案例
--存储过程的案例
SQL> create or replace procedure raiseSalary(empid in number) as
pSal emp.sal%type;
begin
select sal into pSal from emp where empno=empid;
update emp set sal =sal*1.1 where empno=empid;
dbms_output.put_line('员工号:'|| empid || '涨工资前'|| psal || '涨工资后' || psal*1.1);
end;
/
4、存储过程的调用
--存储过程的调用
方法一:
SQL> set serveroutput on;--打开服务
SQL> begin
raiseSalary(7521);
end;
/
员工号:7521涨工资前1250涨工资后1375
PL/SQL procedure successfully completed
方法二:
SQL> set serveroutput on;
SQL> exec raiseSalary(7521);
员工号:7521涨工资前1375涨工资后1512.5
PL/SQL procedure successfully completed
二、存储函数
1、创建存储函数
create function querySal(cno in number)
return number
as
psal number;
pcomm number;
begin
select sal,comm into psal,pcomm from emp where empno=cno;
return psal*12+pcomm;
end;
/
2、创建或替换存储函数
create or replace function querySal(cno in number)
return number
as
psal number;
pcomm number;
begin
select sal,comm into psal,pcomm from emp where empno=cno;
return psal*12+pcomm;
end;
/
3、案例
create or replace function queryEmpSalary(empid in number)
return number
as
pComm number;
pSal number;
begin
select sal,comm into pSal,pComm from emp where empno=empid;
return pSal*12+pComm;
end;
/
4、函数的调用
如果你某个字段为空,但是你想让这个字段显示0nvl(字段名,0),就是当你选出来的时候,这个字段虽然为空,但是显示的是0
declare
v_sal number;
begin
v_sal:=queryEmpSalary(7521);
dbms_output.put_line('salary is:' || v_sal);
end;
/
salary is:18650
三、触发器
1、创建触发器
create or replace trigger tig
before insert on emp
begin
dbms_output.put_line('在插入之前执行');
end;
/
Trigger created
2、触发器的效果
insert into emp values(1234,'hhh','ASD',null,null,null,1200,40);
|