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;
/

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;
 

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
      
时间: 2024-10-05 15:54:10

PL/SQL上机作业的相关文章

PL/SQL 上机练习(二)

函数:1. 函数查看字符串中共包含几个某特殊字符,如'A**B*CEDF'中包含几个'*' 2.函数把员工表中不同的工作连接成一个字符串 3.函数计算个人所得税,工资,薪金所得减3500, 含税级距 税率(%) 速除数 不超过1500 3 0 超过1500到4500 10 105 超过4500 到9000 20 555 超过9000 到35000 25 1005 --1 create or replace function special_char (c in varchar2,v in var

Oracle PL/SQL随堂笔记总结

1.pl/sql编程 1.理解oracle的pl/sql的概念    2.掌握pl/sql编程技术(过程.函数.触发器)    pl/sql是标准sql语句的扩展    简介        1.过程.函数.触发器都是由pl/sql编写        2.过程.函数.触发器是在oracle中        3.pl/sql是非常强大的过程语言        4.过程.函数等可以在java程序被调用    学习必要性:        1.提高应用程序的性能        2.模块化的设计思想    

SQL*Plus和PL/SQL

1. SQL*Plus登陆:在cmd中,使用sqlplus [usernam]/[pwd]或者sqlplus [usernam]/[pwd] as sysdba或者sqlplus [usernam]/[pwd]@[netsvr],netsvr是已定义的网络服务名. 2. 获得帮助索引:help index.获得命令的详细信息:help 命令.查询SQLPlus的所有设置信息:show all.显示某个具体的设置:show 关键字.修改SQLPlus的设置信息:set 参数 参数值 3. 执行SQ

PL/SQL数据库开发那点事

PL/SQL数据库开发那点事-->编程,存储程序 在SQL*plus 中编写PL/SQL程序,并在SQL*plus 中执行它, PL/SQL块的代码就存放在SQL*plus的缓冲区中.如果在SQL*plus 中执行了其他的SQL语句或PL/SQL块,缓冲区中就会存放新的代码,原来的PL/SQL块就会被从缓冲区中清除出去.这种没有名称只是临时存放在缓冲区中的PL/SQL块叫做匿名块.匿名块就是没有名字的PL/SQL块,它仅存放在缓冲区中,只能在当前SQL*plus环境中执行.如果希望PL/SQL块

每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQL程序设计终极指南>志在打造PL/SQL领域最为系统.全面.实战.权威的著作,通过一系列非常突出的优势在大量的同类书中脱颖而出,成为该领域的标准读物. PL/SQL本身涉及的知识点浩瀚.庞杂,初学者根本无法依靠自身能力理清头绪,学习成本极高.本书对知识点进行了体系化的梳理,化繁杂为有序,突出重点,直指核

PL/SQL developer 连接oracle数据库报错“initialization error could not load oci.dll”

声明:PL/SQL 版本:PL/SQL Developer 9.0.6 (http://files.allroundautomations.com/plsqldev906.exe) 报错提示如图: 原因:PL/SQL只对32位OS进行支持,解决方法是额外加载一个oci.dll文件 解决办法:1.下载OCI.DLL相关库文件.地址: (需注册Oracle账号) http://www.oracle.com/technetwork/topics/winsoft-085727.html ----->  

使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复

这种操作百度一搜一大片,今天整理以前做的项目时自己备份了一下数据库,试着将数据进行导出备份和导入恢复了一下:下面是操作过程: 1 开启服务 2 配置监听 找到下面文件: 记事本打开 在导航器的下拉菜单中选择:将数据库添加到树, 然后点击确定 然后使用PL/SQL就可以登录了: 3 建立新表空间和新用户 使用system用户登录:执行如下sql语句建立表空间和新用户,以及给用户授权 建立表空间 Create tablespace myyyjc datafile 'D:\app\Administra

解决pl\sql乱码问题

查看数据库服务器的字符集 select * from nls_database_parameters where parameter='NLS_CHARACTERSET'; PARAMETER                     VALUE NLS_CHARACTERSET              ZHS16GBK select sys_context('USERENV', 'LANGUAGE'); 客户端字符集 select * from nls_instance_parameters

PL/SQL Developer使用技巧、快捷键

1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了. 2.设置关键字自动大写:Tools->Preferences->Editor,将Keyword case选择Uppercase.这样在窗口中输入sql语句时,关键字会自动大写,而其它都是小写.这样阅读代码比较容易,且保持良好得编码风格,同理,在Tools->Preferences->Code Assistant(助手)里可