oracle存储过程总结

第一个无参存储过程 打印"hello world"

-- 第一个存储过程 打印say hello
create or replace procedure sayHello
AS
BEGIN
	DBMS_OUTPUT.PUT_LINE('hello world');
END;
-- 调用方式:
1.execute sayhello();
2.
	BEGIN
		sayhello();
		sayhello();
		sayhello();
	END;

在这里插入图片描述
总结:

  1. 因为需要控制台打印,所以需要先执行‘set serveroutput on’ 启用控制台输出。
  2. ‘execute’ 调用存储过程时可以简写成 ‘exec’
  3. 'begin end’也就是从存储过程里执行存储过程,调用几次,就执行几次。
    知识点:
    存储过程与存储函数的相同点及不同点:
    相同点:都是完成特定功能的程序
    不同点:是否用‘return’语句返回函数值,存储过程不能使用return返回函数值。

输入参数的存储过程

-- 带参数的存储过程 输入参数
-- 需求:给指定员工涨工资,并打印调整前后的薪资
-- 创建测试表 员工薪资表
create table pay(
p_id VARCHAR2(32) primary key,
p_name VARCHAR2(200),
p_age NUMBER,
p_pay NUMBER
)
-- 添加注释
comment on table pay is '薪资表';
COMMENT on column pay.p_name is '员工姓名';
comment on column pay.p_age is '员工年龄';
comment on column pay.p_pay is '员工薪资';
-- 插入数据
insert into pay values (SYS_guid(),'小王',23,6500);
insert into pay values (SYS_guid(),'张三',25,8500);
insert into pay values (SYS_guid(),'李四',24,7500);
-- 查询薪资表
SELECT * from pay;
-- 创建存储过程
create or replace procedure job_update_pay(i_name in VARCHAR,i_num in number)
AS
	-- 定义一个薪资变量
	var_pay pay.p_pay%type;
BEGIN
-- 得到调整前的薪资
	SELECT p_pay into var_pay from pay where p_name = i_name;
-- 调整薪资
	UPDATE pay set p_pay = var_pay+i_num where p_name = i_name;
-- 注意 一般不在存储过程中commit或者rollback
-- 打印薪资
	dbms_output.put_line('调整前:'||var_pay||' 调整后'||var_pay+i_num);
END;

在这里插入图片描述
总结:

  1. var_pay pay.p_pay%type; ----变量var_pay 的数据类型为pay表里的p_pay的字段类型。
  2. 一般在存储过程中不提交或回滚事务,调用的时候提交或回滚。

存储函数

-- 存储函数
--需求:输入员工名称,得到该员工的年薪
-- 创建函数
create or replace function fun_yearpay(v_name in VARCHAR2)
return number 
AS
-- 定义薪资变量
	var_pay pay.p_pay%type;
BEGIN
SELECT p_pay into var_pay from pay where p_name=v_name;

return var_pay*12;
end;

在这里插入图片描述
总结:
函数与过程相似,但必须要有一个return子句,返回函数值。

输出参数存储过程

-- 带参存储过程  输出参数
-- 需求,输入员工姓名,返回该员工的年龄,薪资
-- 创建存储过程
create or replace procedure job_out_pay(
   										v_name in VARCHAR2,
   										o_age out number,
   										o_pay out number)
AS
begin 
SELECT p_age,p_pay into o_age,o_pay from pay where p_name = v_name;
end;

在这里插入图片描述
总结:

  1. declare 用于声明变量
  2. v_name => v_name 表示将v_name的值赋值给v_name
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值