--课前测
declare
type emp_record_type is record(
ename emp.ename%type,
empno emp.empno%type,
dname dept.dname%type
);
type emp_table_type is table of emp_record_type
index by binary_integer;
v_emp emp_table_type;
begin
select e.ename,e.empno,d.dname bulk collect into v_emp from emp e inner join dept d on e.deptno=d.deptno;
for v_i in 1..v_emp.count
loop
dbms_output.put_line('员工号:'||v_emp(v_i).empno||'员工姓名:'||v_emp(v_i).ename||'部门号'||v_emp(v_i).dname);
end loop;
end;
--游标
declare
type emp_record_type is record(
ename emp.ename%type,
empno emp.empno%type,
dname dept.dname%type
);
type emp_table_type is table of emp_record_type
index by binary_integer;
v_emp emp_table_type;
cursor c is select e.ename,e.empno,d.dname from emp e inner join dept d on e.deptno=d.deptno;
begin
for v_emp in c
loop
dbms_output.put_line('员工号:'||v_emp.empno||'员工姓名:'||v_emp.ename||'部门号'||v_emp.dname);
end loop;
end;
--1,写函数和过程,输入三角形三个表的长度。在控制台打印三角形的面积。
--过程
create or replace procedure pro_area(
v_a number,v_b number,v_c number
)
is
v_p number(10,2);
v_area number(10,2);
v_if number(10,2);
begin
v_p:=(v_a+v_b+v_c)/2;
v_if:=v_p*((v_p-v_a)*(v_p-v_b)*(v_p-v_c));
if v_if>0 then
v_area:=sqrt(v_if);
dbms_output.put_line('三角形的面积是:'||v_area);
else
dbms_output.put_line('你输入的三角形不存在');
end if;
end;
declare
v_a number(8,2):=&请输入第一条边;
v_b number(8,2):=&请输入第二条边;
v_c number(8,2):=&请输入第三条边;
begin
pro_area(v_a,v_b,v_c);
end;
--函数
create or replace function fun_area( v_a number,v_b number,v_c number)
return varchar2
is
v_sout varchar2(100);
v_p number(10,2);
v_area number(10,2);
v_if number(10,2);
begin
v_p:=(v_a+v_b+v_c)/2;
v_if:=v_p*((v_p-v_a)*(v_p-v_b)*(v_p-v_c));
if v_if>0 then
v_area:=sqrt(v_if);
v_sout:='三角形的面积是:'||v_area;
else
v_sout:='你输入的三角形不存在';
end if;
return v_sout;
end;
declare
v_sout varchar2(100);
v_a number(8,2):=&请输入第一条边;
v_b number(8,2):=&请输入第二条边;
v_c number(8,2):=&请输入第三条边;
begin
v_sout:=fun_area(v_a,v_b,v_c);
dbms_output.put_line(v_sout);
end;
--2,写一个过程,输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)
create or replace procedure pro_dept_test1(v_deptno number)
is
v_dname dept.dname%type;
v_total dept.deptno%type;
v_avg emp.sal%type;
begin
select dname,count(e.empno),avg(sal+nvl(comm,0))into v_dname,v_total,v_avg from emp e
inner join dept d on e.deptno=d.deptno where
e.deptno=v_deptno group by d.dname;
dbms_output.put_line('部门名称为'||v_dname||'部门总人数为'||v_total||'人,平均工资为'||v_avg||'元');
exception
when no_data_found then
dbms_output.put_line('您输入的部门编号不存在');
end;
declare
v_deptno dept.deptno%type:=&请输入部门编号;
begin
pro_dept_test1(v_deptno);
end;
--3,编写一个存储过程,输入一个员工编号,输出该员工的员工编号,员工姓名,部门名称。
create or replace procedure pro_emp_test1(v_empnoin number)
is
ename emp.ename%type;
empno emp.empno%type;
dname dept.dname%type;
begin
select e.ename,e.empno,d.dname into ename,empno,dname from emp e inner join dept d on e.deptno=d.deptno and e.empno=v_empnoin;
dbms_output.put_line('员工号:'||empno||'员工姓名:'||ename||'部门号'||dname);
end;
declare
v_empno emp.empno%type:=&请输入员工编号;
begin
-- 调用存储过程
pro_emp_test1(v_empno);
exception
when no_data_found then
dbms_output.put_line('输入的员工编号不存在');
end;
--4编写一个存储过程,输出所有员工及其部门领导的姓名、员工号及部门号。
create or replace procedure pro_emp_test2
is
type emp_record_type is record(
ename emp.ename%type,
mname emp.ename%type,
empno emp.empno%type,
deptno emp.deptno%type
);
type emp_table_type is table of emp_record_type
index by binary_integer;
v_emp emp_table_type;
begin
select ename,nvl((select e2.ename from emp e2 where e1.mgr=e2.empno),'无'),empno,deptno
bulk collect into v_emp from emp e1;
for v_i in 1..v_emp.count
loop
dbms_output.put_line('员工姓名:'||v_emp(v_i).ename||',部门领导姓名:'||v_emp(v_i).mname
||',员工号:'||v_emp(v_i).empno||',部门编号:'||v_emp(v_i).deptno);
end loop;
end;
call pro_emp_test2();
标签:end,代码,number,empno,emp,oracle,习题,type,deptno
来源: https://www.cnblogs.com/yanyunpiaomaio/p/10839371.html