|  
 
 
快速理解存储函数、存储过程、触发器 
存储过程、存储函数、触发器 
一、创建存储过程 
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); 
 |