(学习笔记)Oracle存储过程、存储函数

为君一笑 提交于 2020-01-18 06:16:02

Oracle存储过程和存储函数都是数据库对象,他们都是一段可执行的程序,存储过程没有返回值,存储函数有返回值

存储过程——语法:

    create or replace procedure 存储过程名(参数列表)  //创建或替换存储过程(已存在就替换,否则就新建,参数列表可以为空)

    as  

      //说明或声明部分

    brgin

      //程序体

    end;

   执行上述代码会有一条以编译的提示,接下来就可以进行调用

   调用方式: 1.执行 exec 存储过程名+();

        2.begin

          存储过程名+();   //调用一次

          存储过程名+();    /在调用一次

        end;

 自行一个带参数的存储过程

  建表 create table employee (in number(3,0) pormary key, name nvarchar2(3), salary number(7,2)); 插入一条测试数据 insert into employee (1,'大明',4500);

  create or replace procedure raiseSalary(eno number)  //创建名为raiseSalary的储存过程,接受一个员工id参数
  as
  --定义变量保存涨前的薪水  
  old_salary employee.salary%;  //定义加薪前的薪资保存变量
  begin
  --得到员工涨前的薪水
  select salary into old_salary from employee where id = eno;  //查询当前薪资 并赋值给上一个变量
  --给该员工涨100工资
  update employee set salary = old_salary + 100 where id = eno;  //update更新薪资+100
  dbms_output.put_line('涨前 '||old_salary || ' 涨后'||(old_salary+100));  //输出
  end;

  调用:raiseSalary(1);输出:涨前4500涨后4600,表中的数据也有更新

存储函数——语法:

 create or replace function 存储函数名(参数列表)  //创建或替换存储函数(已存在就替换,否则就新建,参数列表可以为空)

  return (返回值类型)

  as

  bgein

  return 结果;

  end;

  例子:给上面的表添加一个字段final_salary表示年终奖,插入一条数据 insert into employee (2,'小明',8000,10000);

  create or replace function query_emp_final_salry(eno number)  //创建一个query_emp_final_salry 存储函数
  return number  //表示次返回值的类型是个number
  as
  salary employee.salary%type;  //定义变量保存薪资
  final_salary employee.final_salary%type;  //定义变量保存年终奖
  begin
  select salary,final_salary into salary,final_salary from employee where id = eno;  //查询并赋值
  return salary * 12+final_salary;  //计算返回
  end;

  调用 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!