oracle触发器函数,oracle 存储过程、函数和触发器用法实例详解

本文实例讲述了oracle 存储过程、函数和触发器用法。分享给大家供大家参考,具体如下:

一、存储过程和存储函数

指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。

创建存储过程

用CREATE PROCEDURE命令建立存储过程。

语法:

create [or replace] procedure 过程名(参数列表)

as

PLSQL子程序体;

--给指定员工涨工资

create procedure addSal(empid in number)

as

psal emp.sal%type;

begin

select sal into psal from emp where empno=empid;

update emp set sal = sal * 1.1 where empno=empid;

dbms_output.put_line(empid || '涨工资前' || psal || '涨工资后' || (psal * 1.1));

end;

调用存储过程

--方法一

begin

addSal(7369);

end;

--方法二

exec addSal(7369);

存储函数

函数为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个return子句,用于返回函数值。函数说明要指定函数名,结果值的类型,以及参数类型等。

创建语法:

CREATE [OR REPLACE] FUNCTION 函数名 (参数列表)

RETURN 函数值类型

AS

PLSQL子程序体;

--查询指定员工的年收入

create function queryEmpSal(empid in number)

return number

as

psal emp.sal%type;

pcomm emp.comm%type;

begin

select sal,comm into psal,pcomm from emp where empno=empid;

return (psal*12) + nvl(pcomm,0);

end;

函数的调用

declare

psal number;

begin

psal:=queryEmpSal(7369);

dbms_output.put_line(psal);

end;

begin

dbms_output.put_line(queryEmpSal(7369));

end;

过程和函数中的IN和OUT

一般来讲,过程和函数的区别在于函数可以有一个返回值,而过程没有返回值。

但过程和函数都可以通过out指定一个或多个输出参数。我们可以利用out参数,在过程和函数中实现返回多个值。

什么时候用存储过程或函数?

原则:如果只有一个返回值,用存储函数,否则,就用存储过程。

创建包和包体

什么是包和包体?

包是一组相关过程、函数、变量、常量、类型和游标等PL/SQL程序设计元素的组合。包具有面向对象设计的特点,是对这些PL/SQL程序设计元素的封装。

包体是包定义部分的具体实现。

包由两个部分组成:包定义和包主体。

--包定义

create [or replace] package 包名 as

[公有数据类型定义]

[公有游标声明]

[公有变量、常量声明]

[公有子程序声明]

end 包名;

--包主体

create [or replace] package body 包名 as

[私有数据类型定义]

[私有变量、常量声明]

[私有子程序声明和定义]

[公有子程序定义]

begin

PL/SQL子程序体;

end 包名;

--创建mypackage包

create or replace package mypackage as

procedure total(num1 in number, num2 in number, num3 out number);

end mypackage;

--mypackage包体

create or replace package body mypackage as

--计算累加和的total过程

procedure total(num1 in number, num2 in number, num3 out number) as

tmp number := num1;

begin

if num2 < num1 then num3 := 0;

else num3 := tmp;

loop

exit when tmp > num2;

tmp := tmp + 1;

num3 := num3 + tmp;

end loop;

end if;

end total;

end mypackage;

(*注意:包定义和包体要分开创建)

调用包

declare

num1 number;

begin

mypackage.total(1, 5, num1);

dbms_output.put_line(num1);

end;

希望本文所述对大家Oracle数据库程序设计有所帮助。 ad51e517755f8fd6a7ec83ced4ecfaf3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值