zoukankan      html  css  js  c++  java
  • PL/SQL上机作业

    Declare
       i number;
       j number;
       mark number;
       cout number:=0;
    Begin
       for i in 1..1000 Loop
          mark :=0;
         for j in 2..i/2 Loop
           if (i mod j = 0 )Then
             mark:=1;
             exit;
           end if;
          end Loop;
          
          if (mark = 0) Then
             cout:=cout+1;
             dbms_output.put(i||',');
            if mod(cout,5)=0 Then
             dbms_output.new_line();
            end if;
          end if;
        end Loop;
        dbms_output.new_line();
        dbms_output.put_line('合计共有'||cout||'个');
    End;
    /
    

      

    declare 
      v_high_sal employees.salary%TYPE;
      v_high_job jobs.job_title%TYPE;
      v_high_count number;
      v_low_sal employees.salary%TYPE;
      v_low_job jobs.job_title%TYPE;
      v_low_count number;
      
    begin
      select *
      into v_high_job,v_high_sal,v_high_count
      from (select job_title,avg(salary),count(*) from employees,jobs where employees.job_id=jobs.job_id 
      group by job_title
      order by avg(salary) desc )
      where rownum=1;
      
      select *
      into v_low_job,v_low_sal,v_low_count
      from (select job_title,avg(salary),count(*) from employees,jobs where employees.job_id=jobs.job_id 
      group by job_title
      order by avg(salary))
      where rownum=1;
      
      dbms_output.put_line('平均工资最高的职位是'||v_high_job||','||'平均最高工资是'||v_high_sal||','||'共有'||v_high_count||'人担任此职'||';');
      dbms_output.put_line('平均工资最低的职位是'||v_low_job||','||'平均最高工资是'||v_low_sal||','||'共有'||v_low_count||'人担任此职'||';');
      dbms_output.put_line('平均工资处于两级的职位平均工资的差别为'||(v_high_sal-v_low_sal)||';');
    end;
    /

    declare
       cursor curTest is
           select job_title,min_salary,max_salary,count(*)
           from jobs, employees
           where jobs.job_id=employees.job_id
           group by job_title,min_salary,max_salary;
       type rec_type is record
           (
               job_name jobs.job_title%type,
               min_sal  jobs.min_salary%type,
               max_sal  jobs.max_salary%type,
               cout     number
           );
        v_JobTitle rec_type;
        times number(3,1);
        e_NOT_SIMILAR EXCEPTION;
    begin 
      open curTest;
      fetch curTest into v_JobTitle;
      Loop
        begin
        exit when curTest%NOTFOUND;
          times := (v_JobTitle.max_sal/v_JObTitle.min_sal);
          if(times<=1.5) then 
              dbms_output.put_line('职位'||v_JobTitle.job_name||'的最低工资为'||v_JObTitle.min_sal||','||'最高工资为'||v_JobTitle.max_sal||','||'两者的差别为'||times||''||','||'供职此职位的人有'||v_JobTitle.cout||','||'工资变化区间正常');
          else
             raise e_NOT_SIMILAR;
          end if;
         EXCEPTION
            when e_NOT_SIMILAR then
               dbms_output.put_line('职位'||v_JobTitle.job_name||'工资变化区间过大'); 
        end;
        fetch curTest into v_JobTitle;
      end Loop;
      close curTest;
      
    end;
    /

    在处理数据集合的时候要用游标。本题是我自定义的一个异常,在循环中抛出异常后还有继续执行下一个循环,在loop里面加了begin和end。

    with dept_job as
    (select dname,
          case job when 'CLERK' then sal end CLERK,
          case job when 'SALESMAN' then sal end SALESMAN,
          case job when 'PRESIDENT' then sal end PRESIDENT, 
          case job when 'MANAGER' then sal end MANAGER, 
          case job when 'ANALYST' then sal end ANALYST
     from emp join dept on emp.deptno=dept.deptno)
     select dname,NVL(to_char(avg(CLERK)),'') CLERK,NVL(to_char(avg(SALESMAN)),'') SALESMAN,NVL(to_char(avg(PRESIDENT)),'') PRESIDENT,
            NVL(to_char(avg(MANAGER)),'') MANGER,NVL(to_char(avg(ANALYST)),'') ANALYST
     from dept_job
     group by dname;
     

    在切换scott用户时出现了问题,参考了http://blog.sina.com.cn/s/blog_7a2a5a5901017fwk.html成功解决。

    NVL(a,b)中的a,b要是同样的数据类型,当a为null时取值为b。

    select dname,CLERK,SALESMAN,PRESIDENT,MANAGER,ANALYST
    from (select dname,sal,job from emp join dept on
          emp.deptno=dept.deptno) dept_job
    pivot
    (avg(sal)
      for job in('CLERK' as CLERK,'SALESMAN' as SALESMAN,
                 'PRESIDENT' as PRESIDENT,'MANAGER' as MANAGER,'ANALYST' as ANALYST)
    )p
          
  • 相关阅读:
    文件名中含有空格读取时产生的异常
    R 常用清洗函数汇总
    Fluid 0.4 新版本正式发布:支持数据预热,优化小文件场景
    阿里云 Serverless 再升级,从体验上拉开差距
    Dubbo-go 源码笔记(二)客户端调用过程
    高质量的缺陷分析:让自己少写 bug
    微服务框架 Go-Micro 集成 Nacos 实战之服务注册与发现
    OpenYurt 深度解读:如何构建 Kubernetes 原生云边高效协同网络?
    在大规模 Kubernetes 集群上实现高 SLO 的方法
    双十一购物节,Nacos 1.4.0 + Go SDK 1.0.1发布
  • 原文地址:https://www.cnblogs.com/LJJ1010/p/4415758.html
Copyright © 2011-2022 走看看