zoukankan      html  css  js  c++  java
  • Oracle中PL/SQL 范例

    1、写匿名块,输入三角形三个表的长度。在控制台打印三角形的面积

    declare
       
          v_side_first number(20):=&第一条边;
          v_side_second number(20):=&第二条边;
          v_side_third number(20):=&第三条边;
       
          v_p number(30);
          v_s number(30);
       begin
          v_p:=(v_side_first+v_side_second+v_side_third)/2;
          v_s:=sqrt(v_p*(v_p-v_side_first)*(v_p-v_side_second)*(v_p-v_side_third));
          dbms_output.put_line('三角形面积为:'||v_s);
       end;

    2、输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)

          declare
            -- 声明record类型对象
            type emp_record_type is record (
    -- 声明record类型中的变量 v_dname dept.dname
    %type, v_count emp.empno%type, v_avgesal emp.sal%type ); v_emp emp_record_type; begin -- 查询所有需要的数据 赋值给变量 select d.dname,count(e.ename),avg(sal+nvl(comm,0)) into v_emp from emp e inner join dept d on e.deptno=d.deptno where d.deptno=&no group by d.dname;     -- 打印输出结果 dbms_output.put_line('部门名称:'||v_emp.v_dname||'总人数:'||v_emp.v_count||'平均工资:'||v_emp.v_avgesal); end;

    3、编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号

       declare
           cursor c is select empno,ename,sal,deptno from emp;
       begin
           for v_emp in c 
            loop
               dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename||',基本工资:'||v_emp.sal||',部门编号:'||v_emp.deptno);
            end loop;
       end;

    4、编写一个PL/SQL块,输出所有比本部门平均工资高的员工信息

    declare
       v_emp emp%rowtype;
       
       cursor c is select * from emp e1 where sal>(select avg(sal) from emp e2 where e1.deptno=e2.deptno);
    
    begin
      
      for v_emp in c
        loop
          dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename||',员工职位:'||v_emp.job||',员工上级:'||v_emp.mgr||'雇佣日期:'||v_emp.hiredate||',基本工资:'||v_emp.sal||',奖金:'||v_emp.comm||',部门编号:'||v_emp.deptno);
        end loop;
     
    end;

    5、编写一个PL/SQL块,输出所有员工及其部门领导的姓名、员工号及部门号

    declare
         -- 声明record类型
         type emp_record_type is record(
           -- 声明record类型中的变量
            ename emp.ename%type,
            mname emp.ename%type,
            empno emp.empno%type,
            deptno emp.deptno%type
           
         );
         -- 声明table类型
         type emp_table_type is table of emp_record_type 
         -- 指定下标的增长方式为整数  每次增长1
         index by binary_integer;
         -- 声明table类型的变量
         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 i in 1..v_emp.count
        loop
          dbms_output.put_line('员工姓名:'||v_emp(i).ename||',领导姓名:'||v_emp(i).mname||',员工编号:'||v_emp(i).empno||',部门编号:'||v_emp(i).deptno);       
        end loop;
    end;

    6、查询姓为“SMITH”的员工信息,并输出其员工号、姓名、工资、部门号。
        – –如果该员工不存在,则插入一条新记录,员工号为2012,员工姓名为“Smith”,工资为7500元,入职日期为“2002年3月5日”,部门号为50。
        – –如果存在多个名“Smith”的员工,则输出所有名为“Smith”的员工号、姓名、工资、入职日期、部门号L。

    declare
              v_emp emp%rowtype;
       
            begin
      
              select * into v_emp from emp where ename='SMITH';
              dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename||',基本工资:'||v_emp.sal||',部门编号:'||v_emp.deptno);
            exception  
    
              when no_data_found then
                insert into emp(empno,ename,sal,hiredate,deptno) values (2012,'SMITH',7500,'5-3月-2001',50);
              when too_many_rows then
                for v_emp in (select * from emp where ename='SMITH')
                loop
                   dbms_output.put_line('员工编号:'||v_emp.empno||'员工姓名:'||v_emp.ename||',基本工资:'||v_emp.sal||',入职日期:'||v_emp.hiredate||',部门编号:'||v_emp.deptno);
              end loop;
            end;

    7、输入员工编号,根据员工的入职时间修改发放奖金类,大于等于6年的奖金为2000,小于6年的奖金是1500

    declare
       -- 声明变量
       v_empno emp.empno%type:=&no;
       v_hiredate emp.hiredate%type;
    begin
      -- 根据输入员工编号,查询入职日期
      select hiredate into v_hiredate from emp where empno=&no;
      -- 判断员工的工作时间,大于等于6年,奖金为2000
      if (sysdate-v_hiredate)/365>=6 then
        update emp set comm=nvl(comm,0)+2000;
        
      else -- 反之,奖金为1500
        update emp set comm=nvl(comm,0)+1500;
      end if;
    end;

    8、分别用loop ,while,for循环在控制台输出1到100的自然数

    -- loop 循环    
    declare
       -- 声明循环变量
       v_i number(10):=1;
    begin
      loop
        -- 判断循环条件, 条件成立,跳出循环
        if v_i>100 then
          exit;
        end if;
        -- 输出1到100的自然数
        dbms_output.put_line(v_i);
        -- 改变循环变量的值
        v_i:=v_i+1;
      end loop;
    end;
    ==============================================
    -- while 循环
    declare
      --声明循环变量
      v_i number(10):=1;
    begin
      -- 判断循环条件,条件成立,执行循环
      while v_i<=100
      -- while循环  输出打印1到100的自然数
      loop
        dbms_output.put_line(v_i);
        -- 改变循环变量的值
        v_i:=v_i+1;
      end loop;
      
    end;
    ===============================================
    
    -- for 不用循环判断,不用改变循环变量的值
    declare
    
    begin
      -- 不用声明循环变量
      for v_i in 1..100
        loop
          -- 输出打印1到100的自然数
          dbms_output.put_line(v_i);
        end loop;
          
    end;

    9、在控制台输出1到100以内的素数

    declare
      v_no     number := 0; --标记是第几个素数
      v_number number; --表示1-100之间的数
      v_num    number;
    begin
      for v_number in 1 .. 100 loop
        --如果整除,那就不是素数,除数+1,;
        --如果不能整除,那么被除数就+1,继续执行除运算
        v_num := ceil(v_number / 2);
        for i in 2 .. v_num loop
          if mod(v_number, i) = 0 then
            exit;
          elsif i > v_num - 1 then
            v_no := v_no + 1;
            dbms_output.put_line('' || v_no || '个素数是:' || v_number);
          end if;
        end loop;
      end loop;
    end;
  • 相关阅读:
    乱七八糟想到什么记什么1
    ubuntu下 安装python module的步骤 分类: python Module 2013-10-12 13:58 624人阅读 评论(0) 收藏
    python中文编码转换 分类: python基础学习 python 小练习 2013-10-11 17:22 331人阅读 评论(0) 收藏
    from ....import导入其他路径的模块 分类: python基础学习 2013-10-11 15:13 315人阅读 评论(0) 收藏
    贪婪 vs 不贪婪 分类: 正则表达式 2013-10-09 15:00 290人阅读 评论(0) 收藏
    删除列表元素时需注意的问题 分类: python基础学习 python 小练习 2013-10-09 14:02 293人阅读 评论(0) 收藏
    #小练习 输出1到100的质数 分类: python 小练习 2013-10-08 17:45 319人阅读 评论(0) 收藏
    Linux下python升级至2.7步骤 分类: python基础学习 python下载 2013-09-29 11:24 4266人阅读 评论(2) 收藏
    实例、类、父类的关系判断 分类: python基础学习 2013-09-27 10:47 614人阅读 评论(0) 收藏
    #小练习 替换文件某行内容 分类: python 小练习 python Module 2013-09-26 11:10 269人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/zhangmenghui/p/10835519.html
Copyright © 2011-2022 走看看