zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    PyTools包罗万象的python工具包
    手撕神经网络实验报告
    数组模拟队列 以及队列的复用(环形队列)
    Sentinel熔断降级
    二维数组与稀疏数组的转换dataStructures
    Sentine熔断降级进阶
    Centos7防火墙以及端口控制
    docker的安装以及使用命令
    ToDesk个人免费 极致流畅的远程协助软件
    typora+PicGo+gitee搭建免费的的床
  • 原文地址:https://www.cnblogs.com/yanyunpiaomaio/p/10839371.html
Copyright © 2011-2022 走看看