oracle 代码块 习题

--课前测
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();

 

上一篇:吴裕雄--天生自然ORACLE数据库学习笔记:SQL语言基础


下一篇:Oracle Sql 胡乱记