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;
调用
来源:https://www.cnblogs.com/yemingqianduzou/p/9371866.html