日期:2014-05-16 浏览次数:20736 次
可以用oracle已经存在的账号scott密码triger登陆进去用里面已存在的表来做试验。
create or replace procedure lpmtest2
as
para1 varchar2(10);
cursor youbiao is select ename from test where sal>1300;
begin
open youbiao;
loop
fetch youbiao into para1;
exit when youbiao%notfound;
dbms_output.put_line('++:'||para1);
end loop;
close youbiao;
end;--最后分号记得写,否则会报错。
?======================================================================
create or replace procedure lpmtest2
as
cursor youbiao is select ename,sal,job from test where sal>1300;
c_row youbiao%rowtype; --定义一个游标变量c_row ,该类型为游标youbiao中的一行数据类型
begin
open youbiao;
loop
fetch youbiao into c_row;
exit when youbiao%notfound;
dbms_output.put_line('++:'||c_row.ename||':'||c_row.sal||':'||c_row.job);
end loop;
close youbiao;
end;
?=========================================================================
create or replace procedure lpmtest3
as
cursor c_dept is select * from dept order by deptno;
cursor c_emp(p_dept varchar2) is select ename,sal from emp where deptno=p_dept order by ename;
r_dept c_dept%rowtype;
v_ename emp.ename%type;
v_sal emp.sal%type;
v_totalsal emp.sal%type; --用来存每个部门所有员工的总工资
begin
open c_dept;
loop
fetch c_dept into r_dept;
exit when c_dept%notfound;
dbms_output.put_line(r_dept.deptno||':'||r_dept.dname||'+++++++++++');
v_totalsal:=0;
open c_emp(r_dept.deptno);
loop
fetch c_emp into v_ename,v_sal;
exit when c_emp%notfound;
dbms_output.put_line('v_ename:'||v_ename||';'||'v_sal:'||v_sal);
v_totalsal:=v_totalsal+v_sal;
end loop;
close c_emp;
dbms_output.put_line('deptsaltotal:'||v_totalsal);
end loop;
close c_dept;
end;
?打印出来效果:
10:ACCOUNTING+++++++++++ v_ename:CLARK;v_sal:2450 v_ename:KING;v_sal:5000 v_ename:MILLER;v_sal:1300 deptsaltotal:8750 20:RESEARCH+++++++++++ v_ename:ADAMS;v_sal:1100 v_ename:FORD;v_sal:3000 v_ename:JONES;v_sal:2975 v_ename:SCOTT;v_sal:3000 v_ename:SMITH;v_sal:800 deptsaltotal:10875 30:SALES+++++++++++ v_ename:ALLEN;v_sal:1600 v_ename:BLAKE;v_sal:2850 v_ename:JAMES;v_sal:950 v_ename:MARTIN;v_sal:1250 v_ename:TURNER;v_sal:1500 v_ename:WARD;v_sal:1250 deptsaltotal:9400 40:OPERATIONS+++++++++++ deptsaltotal:0
?======================================================================
create or replace procedure lpmtest9(v_name varchar2)
is
v_num number:=1;
begin
loop
insert into lpm_user values(v_name,v_num);
commit;
exit when v_num=5;
v_num:=v_num+1;
end loop;
end;
?
=======================================================================
create or replace procedure lpmtest8(lpm_empno number)
is
lpm_job emp.job%type;
begin
select job into lpm_job from emp where empno=lpm_empno;
if lpm_job='PRESIDENT' then
begin
update emp set sal=sal+500 where empno=lpm_empno;
commit;
end;
elsif lpm_job='MANAGER' then --是elsif不是elseif!要少个e
begin
update emp set sal=sal+300 where empno=lpm_empno;
commit;
end;
else
begin
update emp set sal=sal+100 where empno=lpm_empno;
commit;
end;
end if;
end;
?========================================================
create or replace procedure lpmtest15(lpmEmpId emp.empno%type) is addincrement emp.sal%type; tempsal emp.sal%type; begin select sal into tempsal from emp where empno=lpmEmpId; if tempsal>2000 then addincrement:=50; elsif tempsal>1500 then addincrement:=100; else addincrement:=150; end if; update emp set sal=sal+addincrement where empno=lpmEmpId; commit; end;
?=================================================================
例: