oracle 存储过程、函数和触发器用法实例详解
导读:收集整理的这篇文章主要介绍了oracle 存储过程、函数和触发器用法实例详解,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例讲述了oracle 存储过程、函数和触发器用法。分...
收集整理的这篇文章主要介绍了oracle 存储过程、函数和触发器用法实例详解,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例讲述了oracle 存储过程、函数和触发器用法。分享给大家供大家参考,具体如下:
一、存储过程和存储函数
指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。
创建存储过程
用CREATE PROCEDURE命令建立存储过程。
语法:
create [or replace] procedure 过程名(参数列表)asPLSQL子程序体;
--给指定员工涨工资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;
调用存储过程
--方法一beginaddSal(7369); end; --方法二exec addSal(7369);
存储函数
函数为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个return子句,用于返回函数值。函数说明要指定函数名,结果值的类型,以及参数类型等。
创建语法:
CREATE [OR REPLACE] FUNCTION 函数名 (参数列表)RETURN 函数值类型ASPLSQL子程序体;
--查询指定员工的年收入create function queryEmpSal(empid in number)return numberas 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[私有数据类型定义][私有变量、常量声明][私有子程序声明和定义][公有子程序定义]beginPL/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创建主键自增表(sql语句实现)及触发器应用
- Oracle中触发器示例详解
- Navicat Premium中Oracle创建主键自增的方法
- Springboot+MybatisPlus+Oracle实现主键自增的示例代码
- Oracle 触发器实现主键自增效果
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: oracle 存储过程、函数和触发器用法实例详解
本文地址: https://pptw.com/jishu/631694.html