当前位置: 首页 > 编程笔记 >

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

孟谭三
2023-03-14
本文向大家介绍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相关内容感兴趣的读者可查看本站专题:《Oracle常用函数汇总》、《Oracle日期与时间操作技巧总结》及《php+Oracle数据库程序设计技巧总结》

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

 类似资料:
  • 本文向大家介绍Oracle存储过程和自定义函数详解,包括了Oracle存储过程和自定义函数详解的使用技巧和注意事项,需要的朋友参考一下 概述 PL/SQL中的过程和函数(通常称为子程序)是PL/SQL块的一种特殊的类型,这种类型的子程序可以以编译的形式存放在数据库中,并为后续的程序块调用。 相同点: 完成特定功能的程序 不同点:是否用return语句返回值。 举个例子: 一旦创建了改程序并将其存储

  • 本文向大家介绍php 访问oracle 存储过程实例详解,包括了php 访问oracle 存储过程实例详解的使用技巧和注意事项,需要的朋友参考一下 php 访问oracle 存储过程实例详解 比如我的本地Oracle数据库有一个package,里面有一个存储过程: 包名是PKG_TRANS_REL,存储过程是pro_GC_withdraw,这个存储过程有四个参数,两个入参,两个出参。 在PHP中通

  • 本文向大家介绍Oracle中触发器示例详解,包括了Oracle中触发器示例详解的使用技巧和注意事项,需要的朋友参考一下 前言 在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块。 触发器类型 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运

  • 本文向大家介绍MySQL自定义函数和存储过程示例详解,包括了MySQL自定义函数和存储过程示例详解的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍的是关于MySQL自定义函数和存储过程的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1、前置条件 MySQL数据库中存在表user_info,其结构和数据如下: 2、自定义函数 函数:可以完成特定功能的一段

  • 本文向大家介绍Oracle中instr和substr存储过程详解,包括了Oracle中instr和substr存储过程详解的使用技巧和注意事项,需要的朋友参考一下 instr和substr存储过程,分析内部大对象的内容 instr函数 instr函数用于从指定的位置开始,从大型对象中查找第N个与模式匹配的字符串。 用于查找内部大对象中的字符串的instr函数语法如下:  lob_loc为内部大对象

  • Azure函数存储帐户Blob容器触发器 在我们的一个用例中,我正在为具有以下条件的存储帐户容器中的任何活动寻找Azure函数触发器 < li >具有特定命名约定的容器(名称如xxxx-input) < li >它应该自动检测是否创建了新的容器(具有特定的命名约定) < li>