一.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;