declare
cursor cursor_emp is select * from emp where deptno=10;
t_emprow emp%rowtype;
begin
open cursor_emp;
loop
fetch cursor_emp into t_emprow;
exit when cursor_emp%notfound;
dbms_output.put_line('员工编号'||t_emprow.empno||'员工姓名'||t_emprow.ename);
end loop;
close cursor_emp;
end;
declare
type table_dept is table of dept%rowtype index by binary_integer;
t_dept table_dept;
cursor cursor_dept is select * from dept;
begin
open cursor_dept;
fetch cursor_dept bulk collect into t_dept;
close cursor_dept;
for i in t_dept.first..t_dept.last loop
dbms_output.put_line('部门名称'||t_dept(i).dname||'位置是:'||t_dept(i).loc);
end loop;
end;
select * from emp
declare
cursor cursor_emp(v_deptno number)
is select * from emp where deptno=v_deptno;
t_emprow emp%rowtype;
begin
open cursor_emp(&deptno);
loop
fetch cursor_emp into t_emprow;
exit when cursor_emp%notfound;
dbms_output.put_line('员工姓名'||t_emprow.ename||'雇佣日期'||to_char(t_emprow.hiredate,'yyyy-mm-dd'));
end loop;
close cursor_emp;
end;
declare
cursor cursor_dept is select * from dept;
begin
for i in cursor_dept loop
dbms_output.put_line(i.dname||'===='||i.loc);
end loop;
end;
declare
cursor emp_cursor is select * from emp;
type my_table_type is table of emp_cursor%rowtype index by binary_integer;
my_table my_table_type;
i number;
begin
open emp_cursor;
for i in 1..5 loop
fetch emp_cursor into my_table(i);
end loop;
close emp_cursor;
for i in 1..5 loop
dbms_output.put_line(my_table(i).empno||' '||my_table(i).ename||' '||my_table(i).job||' '||my_table(i).mgr||' '||my_table(i).hiredate||' '||my_table(i).sal||' '||my_table(i).comm||' '||my_table(i).deptno);
end loop;
end;
create or replace trigger tri_emp
before update on emp
begin
if to_char(sysdate,'day') in ('星期一','星期日')then
raise_application_error(-20001,'星期一或日不能修改enp表');
end if;
end;
update emp set ename='ALLEN' where empno=7499;
select *from emp
alter trigger tri_emp disable;
alter trigger tri_emp enable;
drop trigger tri_emp
create or replace trigger tri_emp1
before update or delete or insert on emp
begin
if to_char(sysdate,'day') in ('星期日') then
if updating then
raise_application_error(-20001,'星期日不能修改enp表');
elsif deleting then
raise_application_error(-20001,'星期日不能删除enp表');
else
raise_application_error(-20001,'星期日不能添加enp表');
end if;
end if;
end;
delete from emp where empno=7499;
alter trigger tri_emp1 disable;
create or replace trigger tri_emp2
before update or delete on emp
for each row when(old.deptno=30)
begin
if updating('sal') then
if :new.sal<:old.sal then
raise_application_error(-20000,'工资不能降低');
end if;
elsif updating('comm') then
if :new.comm<:old.comm then
raise_application_error(-20000,'奖金不能降低');
end if;
elsif deleting then
raise_application_error(-20000,'不能删除');
end if;
end;
update emp set sal=15000 where deptno=30;
select *from emp
delete from emp
alter trigger tri_emp2 disable;
create or replace trigger tri_emp3
after update on dept
for each row
begin
update emp set deptno=:new.deptno where deptno=:old.deptno;
end;
update dept set deptno=60 where deptno=20
select * from dept
select * from emp
alter trigger tri_emp3 disable;
create table delDept(
deptno number(10),
dname varchar(200),
loc varchar(200)
)
create or replace procedure insertDelDept(v_deptno number,v_dname varchar2,v_loc varchar2)
is
begin
insert into deldept(deptno,dname,loc) values(v_deptno,v_dname,v_loc);
end;
create or replace trigger tri_delDept
after delete on dept
for each row
begin
insertDelDept(:old.deptno,:old.dname,:old.loc);
end;
select * from dept
delete from dept where deptno=44
select * from delDept
create table loginlog(
loguser varchar2(200),
loginip varchar(200),
logindate date
)
select *from loginlog
create or replace trigger logintest_tri
after logon database
begin
insert into loginlog values(ora_login_user,ora_client_ip_address,sysdate);
end;