Oracle中使用存储过程,触发器

一.Oracle中使用存储过程

1.创建一个存储过程

--创建一个存储过程,插入dept
 create or replace procedure pro_dept is
begin
  insert into dept values (88, '研发部', '香港');
end;
begin
  pro_dept;
end; 
select * from dept;
 drop procedure pro_dept;

2.创建一个in模式参数的存储过程

--创建一个in模式参数的存储过程
 create or replace procedure pro_dept 
  (no NUMBER,name VARCHAR2,  loc VARCHAR2)
  is
begin
  insert into dept values (no, name,loc);
end;
begin
  pro_dept(89, '研发部', '香港');
end;
 select * from dept;

3.创建一个out式参数的存储过程,传入编号,输出姓名

create or replace procedure pro_emp
( no number,name out varchar2 )
is
begin
  select ename into name from emp where empno=no;
end;

declare
v_no  NUMBER(4) := '&编号';
v_name VARCHAR2(10);
begin
  pro_emp(v_no,v_name);
  dbms_output.put_line('员工编号为:'||v_no||chr(9)||'员工姓名为:'||v_name);
  end;

4.创建一个in,out模式参数


--创建一个in,out模式参数,根据工资 计算扣除个人税后,最终得到的金额

create or replace procedure pro_emp_sal
(sarly in out number)
 is
begin
  if sarly<3500 then
    sarly:=sarly;
    else
  sarly:=sarly-(sarly-3500)*0.2;
  end if;
  end;

declare
v_sal number :='&工资';
begin
  pro_emp_sal(v_sal);
   dbms_output.put_line('最后工资为'||v_sal);
  end;

二.oracle中使用触发器

1.创建语句级触发器,即在执行某个操作语句时触发该触发器

--当执行增加,删除,修改时触发该触发器
create or replace trigger tri_emp
  after insert or delete or update on emp
begin
  if inserting then
    dbms_output.put_line('有人正在新增信息!');
  elsif updating then
    dbms_output.put_line('有人正在修改信息!');
  elsif deleting then
    dbms_output.put_line('有人正在删除信息!');
  end if;
end;
update emp set ename='jack' where empno='7499'

2.创建行级触发器

create or replace trigger tri_dept 
  before  delete  on dept
for each row
begin
  delete emp where deptno=:old.deptno;
end;

delete dept where deptno=10;
select * from emp;

3.创建替换触发器

create or replace view view_emp_dept
as
select empno,ename,dept.deptno,dname from emp,dept where dept.deptno=emp.deptno;

create or replace trigger tri_view 
instead of update on view_emp_dept
for each row
begin
  update emp set ename=:new.ename where empno=:old.empno;
  end;
  update view_emp_dept set ename='tom' where empno='7499';
  select * from emp;

4.用户触发器

--用户触发器
create table oper_log
(
per_name varchar2(20),
per_type varchar2(20),
per_action varchar2(20),
per_user varchar2(20),
per_date varchar2(20)
);
create  or replace trigger tri_log
before create or alter or drop
on scott.schema
begin
  insert into oper_log values 
  (
  
  ora_dict_obj_name,
  ora_dict_obj_type,
  ora_sysevent,
  ora_login_user,
  sysdate
  );
  end;

create table ceshi(id int, name varchar2(10) );
select * from oper_log;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值