
本文介绍了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;
程序和功能的输入和输出
通常来说,过程和函数之间的区别在于,该函数可以具有返回值,但是过程没有返回值.

但是过程和函数都可以指定一个或多个输出参数. 我们可以使用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编程的每个人都有帮助.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-196596-1.html
从我做起
用魚雷小艇和炮艇
小王子