oracle 存储过程、函数和触发器用法实例详解
时间:2020-02-20来源:系统城作者:电脑系统城
本文实例讲述了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数据库的系统结构
1.Oracle数据库系统结构概述
2.Oracle数据库存储结构
物理存储结构
控制文件
数据文件
重做日志文件
归档日志文件
Oracle数据库逻辑结构
数据块(Data Block)
(盘)区(Extent)
段(Segment)
表空间(Tablespace)
本地管...
2023-10-31
-
Oracle19c最新版保姆级别最详细的安装配置教程
windows下的Oracle19c
一、官网下载Oracle19c数据库
二、安装Oracle数据库
1.解压安装包
2.运行setup.exe安装
三、配置
四、安装完Oracle数据库,给scott用户解锁
1.解决Oracle数据库中没有scott账户的问题
2.给scott...
2023-10-31