`

PLSQL

 
阅读更多
--变量声明
 declare 
 -- 程序体
  begin
     dbms_output.put_line('Hello World');
  end;

 

/*
if语句: 判断用户键盘输入的数字
*/
set serveroutput on
--接收键盘输入
accept num prompt '请输入一个数字:';

declare
   --通过&取输入的值
   pnum number := #
begin
  if pnum = 0 then  dbms_output.put_line('您输入的是0');
  end if;
  
  if pnum = 1 then  dbms_output.put_line('您输入的是1');
  end if;
  
end;
/

 

/*
带参数的光标: 查询并打印10号部门的员工的姓名和薪水
select ename,sal from emp where deptno=?
*/
set serveroutput on
declare
  cursor cemp10(pdno number) is select ename,sal from emp where deptno=pdno;
  pename emp.ename%type;
  psal   emp.sal%type;
begin
  open cemp10(20);

  loop
    fetch cemp10 into pename,psal;
    exit when cemp10%notfound;
    
    dbms_output.put_line(pename||'的工资是'||psal);
    
  end loop;
  close cemp10;
end;
/

 

/*
被0除
catch(***Exception ex){
    ...
}
*/
set serveroutput on
declare
   --定义数值变量,用于保存1/0结果
   pnum number;
begin
  --赋值
  pnum := 1/0;
  
exception
  when zero_divide then dbms_output.put_line('被0除');
end;
/

 

/*
给员工涨工资,按照工种涨:总裁涨1000 经理800 其他人员400
可能的sql:
select empjob,empno from emp;
update emp set sal=sal+? where empno=?
*/
set serveroutput on
declare 
  --光标保存员工的编号和工作
  cursor cemp is select empno,empjob from emp;
  --对应的变量
  pempno emp.empno%type;
  pempjob emp.empjob%type;
begin 
  open cemp;
  LOOP
    --取出一个员工
    fetch cemp into pempno,pempjob;
    --退出条件
    exit when cemp%notfound;
    --判断
    if pempjob = 'PRESIDENT' then update emp set sal=sal+1000  where empno=pempno;
      elsif pempjob= 'MANAGER' then update emp set sal=sal+800 where empno=pempno;
      else update emp set sal=sal+400 where empno=pempno;
    end if;      
    
  END LOOP ;
  close cemp;
  
  --提交
  commit;
  
  dbms_output.put_line('完成');
  
end;
/














 

/*
使用游标查询员工姓名和工资,并打印
可能的sql:
select ename,sal from emp
*/
set serveroutput on
declare
  --定义光标
  cursor cemp is select ename,sal from emp;
  --定义光标对应的变量
  pename emp.ename%type;
  psal emp.sal%type;
begin
  --打开光标
  open cemp;

  --通过循环取出光标中的值
  loop
    --取值
    fetch cemp into pename,psal;
    --退出条件
    exit when cemp%notfound;
    
    --取到值
    dbms_output.put_line(pename||'的薪水是'||psal);
  
  end loop;
  --关闭光标
  close cemp;
end;
/

 

/*
引用型变量和记录型变量
1. 引用型变量: 查询7839员工姓名和薪水 select ename, sal from emp where empno=7839;
2. 记录型变量: 查询7839员工所有信息  select * from emp where empno=7839;
*/

set serveroutput on
declare
  --申明引用型变量
  pename emp.ename%type; --记录姓名
  psal   emp.sal%type;--记录薪水
  --记录型变量
  emprec emp%rowtype;
begin
  --执行查询
  --select ename, sal into pename,psal from emp where empno=7839;
  
  select * into emprec from emp where empno=7839;
  
  --打印
  --dbms_output.put_line(pename||'的薪水是'||psal);
  dbms_output.put_line(emprec.ename||'的薪水是'||emprec.sal);
end;
/

 

/*
自定义例外
*/
set serveroutput on
declare
  cursor cemp(pdno number) is select ename from emp where deptno=pdno;
  --变量
  pename emp.ename%type;
  --例外
  no_emp_data exception;
begin
  open cemp(70);
  
  --取值
  fetch cemp into pename;
  
  if cemp%notfound then raise no_emp_data;
  end if; 

  close cemp;
exception
  when no_emp_data then dbms_output.put_line('没有70号部门的员工');
end;
/

 

/*
打印1~10
*/
set serveroutput on
declare 
  pnum number :=1;
begin
  loop
    --退出条件
    exit when pnum > 10;
    
    --打印
    dbms_output.put_line(pnum);
    
    pnum :=  pnum  + 1;
    
  end loop;
end;
/

  

/*
实例1:统计每年入职的员工个数。
select count(*) "Total", sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) "1980"
from emp;

可能的sql:
select to_char(hiredate,'yyyy') from emp;
*/
set serveroutput on
declare
  --定义光标保存员工的入职年份
  cursor cemp is select to_char(hiredate,'yyyy') from emp;
  phiredate varchar2(4);

  --计数器
  count80 number := 0;
  count81 number := 0;
  count82 number := 0;
  count87 number := 0;
begin
  --打开光标
  open cemp;
  loop
    --取值
    fetch cemp into phiredate;
    --退出条件
    exit when cemp%notfound;
    
    if phiredate = '1980' then count80 := count80 +1;
      elsif phiredate = '1981' then count81:=count81+1;
      elsif  phiredate = '1982' then count82:=count82+1;
      else  count87 := count87 + 1;
    end if;
  
  end loop;  
  --关闭
  close cemp;
  
  --输出
  dbms_output.put_line('总数' || (count80+count81+count82+count87));
  dbms_output.put_line('80年'|| count80);
  dbms_output.put_line('81年'|| count81);
  dbms_output.put_line('82年'|| count82);
  dbms_output.put_line('87年'|| count87);
end;
/

 

/*
实例2:
为员工长工资。从最低工资调起每人长10%,但工资总额不能超过6万元,
请计算长工资的人数和长工资后的工资总额,并输出输出长工资人数及工资总额。
可能用到的sql:
select empno from emp order by sal;
涨工资:update emp set sal=sal*1.1 where empno=?
工资总额: select sum(sal) from emp;
*/
set serveroutput on
declare
  --查询员工,按照工资升序排列
  cursor cemp is select empno from emp order by sal;
  pempno emp.empno%type;--记录员工的编号
  
  --变量保存工资的总额
  psalTotal number;
  --计数器保存涨工资的人数
  empcount number :=0;
begin
  --初始化工资的总额
  select sum(sal) into psalTotal from emp;
  --涨工资
  open cemp;
  loop
    --第一个退出条件
    exit when psalTotal > 60000;
    --取出一个员工涨工资
    fetch cemp into pempno;
    --第二个退出条件
    exit when cemp%notfound;
    --涨工资
    update emp set sal=sal*1.1 where empno=pempno;
    --人数加一
    empcount := empcount + 1;
    
    --重新计算工资总额
     select sum(sal) into psalTotal from emp;    
  end loop;
  close cemp;
  
  --提交
  commit;
  
  --输出结果
  dbms_output.put_line('工资总额:' || psaltotal);
  dbms_output.put_line('涨工资的人数:' || empcount);
   dbms_output.put_line('-----------------------');
end;
/

 

/*
实例3:
用PL/SQL语言编写一程序,实现按部门分段(6000以上、(6000,3000)、3000元以下)
统计各工资段的职工人数、以及各部门的工资总额(工资总额中不包括奖金)

可能的sql:
查询部门: select distinct deptno from dept;
取出该部门的员工: select sal from emp where deptno=?
计算该部门的工资总额: select sum(sal) from emp where deptno=?
*/
set serveroutput on
declare
  --查询部门
  cursor cdept is select distinct deptno from dept;
  pdeptno dept.deptno%type;
  
  --查询该部门中的员工
  cursor cemp(pdno number) is select sal from emp where deptno=pdno;
  psal emp.sal%type;
  
  --计数器
  count1 number;-->6000
  count2 number;--3000~6000
  count3 number;--<3000
  
  --工资总额
  psalTotal number;
begin
  --获取部门
  open cdept;
  loop
    --取一个部门
    fetch cdept into pdeptno;
    --退出
    exit when cdept%notfound;
    --初始化计数器
    count1 := 0;count2 := 0;count3 := 0;
    --得到该部门的工资总额
    select sum(sal) into psalTotal from emp where deptno=pdeptno;
    --得到该部门的员工的工资
    open cemp(pdeptno);
    loop
      --取一个员工的工资
      fetch cemp into psal;
      exit when cemp%notfound;
      
      --判断
      if psal >= 6000 then count1 := count1 +1;
        elsif psal < 6000 and psal >=3000 then count2:=count2+1;
        else count3:=count3+1;
      end if;
    end loop;
    close cemp;  
    
    --保存结果
    insert into msg1 values(pdeptno,count3,count2,count1,psalTotal);
    commit;
    
  end loop;  
  close cdept;
  
  dbms_output.put_line('完成');
end;
/

 

分享到:
评论
1 楼 小小诺 2013-02-15  
博主实例2中的代码博主难道没有测试吗?“工资总额不能超过6万元” 这个条件满足了吗?

相关推荐

    PLSQL_Developer8.0绿色版64位

    PLSQL Developer是一款强大的Oracle数据库开发工具,专为PL/SQL编程语言设计,它提供了一整套集成环境,便于开发、调试、管理以及执行PL/SQL代码。标题中的"PLSQL_Developer8.0绿色版64位"指的是该版本是针对64位...

    plsql 32位下载

    PLSQL Developer是一款强大的Oracle数据库管理工具,主要针对PL/SQL语言进行开发、调试和管理。在32位操作系统环境下,用户可能需要下载适用于该系统的PLSQL Developer版本。本指南将详细介绍如何下载并安装32位...

    PLSQL Developer14用户指南

    PLSQL Developer 14用户指南 PLSQL Developer 14用户指南是Oracle公司出品的一款专业database开发工具,旨在帮助用户快速掌握PL/SQL语言编程。该指南详细介绍了PL/SQL Developer 14的安装、配置、编程和调试等方面...

    PlSql中的 CnPlugin 插件

    **PlSql中的CnPlugin插件详解** PL/SQL Developer(简称PLSQL)是一款由Allround Automations公司开发的专业Oracle数据库管理与开发工具,它为数据库管理员和开发人员提供了强大的功能,包括编写、调试、执行SQL和...

    plsql11汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL程序。在中文环境下,对于不熟悉英文界面的用户来说,使用英文版可能会带来不便。"plsql11汉化包"正是为了解决这个问题,...

    PLSQL14_32位

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL程序单元。这个"PLSQL14_32位"压缩包文件很可能是PLSQL Developer的第14版本,专为32位操作系统设计。如果你的计算机上已经...

    PLSQL安装包及解决PLSQL过期文件

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。... 该安装包包含了解决PLSQL过期的文件,将PLSQL安装后将解决过期的文件放到安装包中,即可解决PLSQL过期的问题。即可永久使用。

    PLSQL程序优化和性能分析方法

    PLSQL程序优化和性能分析方法 PLSQL程序优化是指在编写PLSQL程序时,为了提高程序的执行效率和性能所采取的一系列措施和技术。这些措施和技术可以帮助开发者编写高效、可靠、可维护的PLSQL程序,从而提高系统的整体...

    PLSQL Developer 8.0汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。这个8.0版本的汉化包是专为那些需要中文界面的用户设计的,使得国内用户在使用PLSQL Developer时能更加方便地理解和...

    PLSQL 操作学习文档

    PLSQL(Procedural Language/Structured Query Language)是Oracle数据库中的一个强大工具,它结合了SQL的查询功能和过程性编程语言的特点,使得数据库管理、数据处理和应用程序开发更为便捷。"PLSQL Developer"是一...

    plsql8.0汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。在8.0版本中,为了方便中文用户使用,官方或社区提供了汉化包,使得界面和帮助文档能够显示为中文,提高中国用户的...

    PLSQL免安装版(无需安装Oracle客户端)

    PLSQL Developer是一款强大的Oracle数据库管理工具,尤其适合于开发和管理员工进行数据库操作。这款工具以其易用性和全面的功能而闻名,它允许用户编写、测试和调试PL/SQL代码,管理表、视图、存储过程等数据库对象...

    plsql developer9.0破解版

    plsql developer9 0破解版 PLSQL Developer 9 0 0 1601破解版本使用了8 0的汉化包 可以正常使用 无需注册 默认为英文 点击菜单tools preferences appearance language 选择简体中文即可切换到简体中文界面 如果...

    PLSQL developer 64 位

    PLSQL Developer是一款强大的Oracle数据库开发工具,专为64位操作系统设计。这款工具以其直观的用户界面、高效的代码编辑器和全面的调试功能而受到广大数据库管理员和开发者的青睐。在"PLSQLDeveloper_解压版(64位...

    plsql 12 汉化版+注册Key

    PLSQL Developer是一款强大的Oracle数据库开发工具,由Allround Automations公司开发。在本文中,我们将深入探讨PLSQL Developer 12的汉化版及其与Oracle数据库的交互,以及如何使用注册Key激活软件。 PLSQL ...

    PLSQL 绿色版_免安装ORACLE.zip

    PLSQL Developer是一款强大的Oracle数据库管理工具,主要用于编写、调试、执行和管理PL/SQL程序。在给定的压缩包文件“PLSQL 绿色版_免安装ORACLE.zip”中,用户可以找到一种无需正式安装Oracle客户端即可使用PLSQL ...

    plsql批量导入数据

    在Oracle数据库环境中,PL/SQL Developer(简称PLSQL)是一种常用的工具,用于编写、调试和管理PL/SQL代码。当我们需要处理大量数据导入任务时,PLSQL提供了多种方法来实现批量导入,这些方法高效且灵活。本文将详细...

    PLSQL免安装版本下载

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。在许多情况下,用户可能需要PLSQL的免安装版本,这可能是出于便携性、节省系统资源或者避免系统冲突的考虑。标题...

    plsql64位系统

    PLSQL Developer是一款强大的Oracle数据库开发工具,专为64位操作系统设计。这款工具以其直观的用户界面、高效的代码编辑和调试功能,深受数据库管理员和开发人员喜爱。在64位系统上使用PLSQL Developer,可以充分...

    PLSQL12免安装版

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、测试和管理PL/SQL代码。这个“PLSQL12免安装版”是特别优化过的版本,它省去了传统的安装过程,用户可以直接运行,无需进行复杂的安装步骤,这对于...

Global site tag (gtag.js) - Google Analytics