zoukankan      html  css  js  c++  java
  • Oracle

    --存储过程范例:得到雇员表 emp 的记录数 begin
    --说明:若过程中要向外抛异常,请使用 exception when others then raise; 这个抛出的异常在程序里是可以捕获的。
    create or replace procedure getEmpCount AS
    v_total number(10);
    begin
    select count(*) into v_total from emp;
    dbms_output.put_line('雇员总人数为:'||v_total);
    end;
    --存储过程范例:得到雇员表 emp 的记录数 end
     
     
    --函数范例,通过 id 得到雇员姓名 begin--
    create or replace function get_name(p_id in number default 1) return varchar2 as
    v_name varchar2(30);
    begin
      select name into v_name from emp where id = p_id;
      return (v_name);
      exception
      when no_data_found then dbms_output.put_line('没有该ID:'||p_id);
      return (null);
      when too_many_rows then dbms_output.put_line('有重复的ID!');
      return (null);
      when others then dbms_output.put_line('发生其他错误!');
      return (null);
    end;
    --函数范例,通过 id 得到雇员姓名 end--
     
     
     
     
    --包范例:雇员表 emp 的增、删、改、查 
    --说明:包,分为包头(当做接口)和包体(当做实现类),外部只能调用到在包头中申明过的内容,包体内属于私有内容,外部(其它用户)是调用不到的--
    --包头 begin--
    create or replace package pkg_emp is
      v_emp_count number(5);--雇员人数
      procedure init(p_max number, p_min number);--初始化
      procedure showEmps;--显示雇员列表
      procedure insertEmp(p_id number, p_name varchar2, p_salary number);--插入雇员
      procedure changeSalary(p_id number, p_salary number);
    end pkg_emp;
    --包头 end--
     
    --包体 begin-- 
    create or replace package body pkg_emp is
      v_message varchar2(50);--显示信息
      v_max_sal number(7);--工资上限
      v_min_sal number(7);--工资下限
      function exist(p_id number) return boolean;--判断雇员是否存在
      procedure showMessage;--显示信息
      --初始化--
      procedure init(p_max number, p_min number) is begin
        select count(*) into v_emp_count from emp;
        v_max_sal := p_max;
        v_min_sal := p_min;
        v_message := '初始化过程已经完成!';
        showMessage;
      end init;
      --显示雇员列表--
      procedure showEmps is begin
        dbms_output.put_line('ID 姓名 工资');
        for v_emp in(select * from emp) loop
          dbms_output.put_line(to_char(v_emp.id)||RPAD(v_emp.name,10,'')||to_char(v_emp.salary));
        end loop;
        dbms_output.put_line('雇员总人数'||v_emp_count);
      end showEmps;
      --插入雇员--
      procedure insertEmp(p_id number, p_name varchar2, p_salary number) is begin
          if not exist(p_id) then
            insert into emp(id, name, salary) values(p_id, p_name, p_salary);
            commit;
            v_emp_count := v_emp_count + 1;
            v_message := '雇员['||p_id||', '||p_name||', '||p_salary||']已插入!';
          else
            v_message := '雇员['||p_id||', '||p_name||', '||p_salary||']已存在,无法插入!';
          end if;
          showMessage;
        exception
          when others then
            v_message := '雇员['||p_id||', '||p_name||', '||p_salary||']插入异常!';
          showMessage;
      end insertEmp;
      --删除雇员--
      procedure deleteEmp(p_id number) is begin
          if exist(p_id) then
            delete from emp where id = p_id;
            commit;
            v_emp_count := v_emp_count - 1;
            v_message := '雇员['||p_id||']删除成功!';
          else
            v_message := '雇员['||p_id||']不存在,删除失败!';
          end if;
          showMessage;
        exception
          when others then
            v_message := '雇员['||p_id||']删除异常!';
          showMessage;
      end deleteEmp;
      --修改雇员工资--
      procedure changeSalary(p_id number, p_salary number) is begin
          if (p_salary > v_max_sal or p_salary < v_min_sal) then
             v_message := '工资超出修改范围!';
          elsif not exist(p_id) then
             v_message := '雇员['||p_id||']不存在,无法修改!';
          else
             update emp set salary = p_salary where id = p_id;
             commit;
             v_message := '雇员['||p_id||']修改成功!';
          end if;
          showMessage;
        exception
          when others then
             v_message := '雇员['||p_id||']修改异常!';
          showMessage;
      end changeSalary;
      --显示信息--
      procedure showMessage is begin
        dbms_output.put_line('提示信息:'||v_message);
      end showMessage;
      --判断雇员是否存在--
      function exist(p_id number) return boolean is
      v_num number;--局部变量
      begin
        select count(*) into v_num from emp where id = p_id;
        if v_num=1 then
           return true;
        else
           return false;
        end if;
      end exist;
    ---------------
    end pkg_emp;
    --包体 end--
     
     
     
    select * from emp; 
    delete from emp;
    --调用调试--
    begin
    pkg_emp.init(p_max => 6000, p_min => 600);--包头初始化
    end;
     
    begin 
    pkg_emp.showEmps();--显示雇员列表
    end;
     
    begin 
    pkg_emp.insertEmp(p_id => 3, p_name => 'maot', p_salary => 5000 );--插入雇员
    end;
     
    begin 
    dbms_output.put_line('当前雇员总人数:'||maod.pkg_emp.v_emp_count);--通过全局变量 v_emp_count 查看雇员人数
    end;
     
    begin 
    maod.pkg_emp.deleteEmp(p_id => 1);--删除雇员
    end;
     
    begin 
    maod.pkg_emp.changeSalary(p_id => 1, p_salary => 5000);--修改雇员工资
    end;
     
  • 相关阅读:
    JS事件冒泡、事件捕获和事件委托
    实现英文字母排序
    JavaScript异步加载的四种方法
    JavaScript作用域与作用域链
    JavaScript 自定义属性 data-*
    asycn和await
    style collectd
    JavaScript如何比较两个数组的内容是否相同
    VScode插件开发--M2D文档转换插件
    BOM笔记
  • 原文地址:https://www.cnblogs.com/andremao/p/7860466.html
Copyright © 2011-2022 走看看