PL/SQL-04

过程、函数与包
过程、函数与包都属于PL/SQL语句块的命名块,过程和函数统称为子程序。
过程和函数非常相似,具有如下特点:
1、都具有名称,可以接收传入或者传出参数
2、都具有声明部分,执行部分,异常处理部分
3、在使用前会被编译并存储到数据库中
4、函数和过程的最大区别在于函数具有返回值,而过程没有

create or replace procedure addempsalary ( p_ratio number , p_empno number )
as
begin
  if p_ratio > 0
  then
 update scott.emp set sal = sal * ( 1 + p_ratio) where empno = p_empno ;
  end if;
  dbms_output.put_line(‘加薪成功!‘);
end ;

包是一个逻辑单位,PL/SQL可以让开发人员把逻辑相关的类型、变量、游标和子程序放在一个包内,这样更加清楚,易于理解

包规范部分:包规范部分定义了应用程序的接口,他声明了变量、常量、类型、异常、游标等。
包体部分:包体部分用于实现包规范部分声明的子程序和游标。
包规范的建立使用 create package 语句 , 包体的建立使用create package body语句。

/* 包规范定义 */
create or replace package empsalary
as
--执行实际的加薪动作
procedure addempsalary (p_ratio number , p_empno number ) ;
--使用if-elsif 语句得到加薪比例
function change_sal (p_job varchar2) return number ;
--使用case 语句得到加薪比率
function getaddsalaryratiocase (p_job varchar2) return number ;
end empsalary ;

/* 包体定义 */

create or replace package body empsalary
as
 --过程加薪
 procedure addempsalary ( p_ratio number , p_empno number )
 as
 begin
   if p_ratio > 0
   then
  update scott.emp set sal = sal * ( 1 + p_ratio) where empno = p_empno ;
   end if;
   dbms_output.put_line(‘加薪成功!‘);
 end ;
 --使用if-elsif 语句得到加薪比例
 function change_sal (p_job varchar2)
 return number
 as v_result number(7,2) ;
 begin
 if  p_job = ‘CLERK‘ then v_result := 0.1 ;
 elsif p_job = ‘SALESMAN‘ then v_result := 0.15 ;
 elsif p_job = ‘MANAGER‘ then v_result := 0.2 ;
 end if;
 return v_result ;
 end;

--使用case 语句得到加薪比率

function getaddsalaryratiocase ( p_job varchar2 ) return number
 as v_result number (7,2) ;
 begin
  case p_job
   when ‘CLERK‘ then v_result := 0.10 ;
   when ‘SALESMAN‘ then v_result := 0.15 ;
   when ‘MANAGER‘ then v_result := 0.20 ;
  end case ;
  return v_result;
  exception when others
  then dbms_output.put_line(‘产生异常:‘);
  
 end ;
end empsalary;

时间: 2024-12-14 08:06:29

PL/SQL-04的相关文章

PL/SQL 04 游标 cursor

--游标 declare  cursor 游标名字  is  查询语句;begin  其他语句;end; --游标的属性%FOUND%NOTFOUND%ISOPEN%ROWCOUNT(当前游标的指针位移量) --FETCH的两种形式FETCH cursor_name INTO var1, var2, -;FETCH cursor_name INTO record_var; --游标的FETCH循环LOOP  FETCH cursor INTO-  EXIT WHEN cursor%NOTFOUN

设置Oracle PL/SQL 时间显示格式 NLS_TIMESTAMP_FORMAT 2008-01-27 00:04:35:877000

设置Oracle PL/SQL时间显示格式NLS_TIMESTAMP_FORMAT Oracle中TIMESTAMP时间的显示格式 Oracle数据库的时间字段我们通常是使用timestamp 格式,在未做设置前, 查询出来的数据类似于“27-1月 -08 12.04.35.877000 上午”, 经过to_char函数转换后得到如下结果:“2008-01-27 00:04:35:877000”, 为了能直接修改时间,我们只需要在系统属性-高级-环境变量-系统变量 中增加如下设置: www.2c

[Oracle系列整理04] oracle pl/sql 基础

PL/SQL块中只能直接嵌入SELECT,DML(INSERT,UPDATE,DELETE)以及事务控制语句 (COMMIT,ROLLBACK,SAVEPOINT),而不能直接嵌入DDL语句(CREATE,ALTER,DROP)和DCL语句 (GRANT,REVOKE) 1.检索单行数据    1.1使用标量变量接受数据  v_ename emp.ename%type;  v_sal   emp.sal%type;  select ename,sal into v_ename,v_sal fro

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ——通过知识共享树立个人品牌. 继上五篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不

ORACLE PL/SQL编程总结(一)

----------PL/SQL 程序设计简介----------- 1.1   SQL与PL/SQL 1.1.1   什么是PL/SQL? PL/SQL是 Procedure Language & Structured Query Language 的缩写.PL/SQL是对SQL语言存储过程语言的扩展.从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL.它现在已经成为一种过程处理语言,简称PL/SQL.目前的PL/SQL包括两部分,一部分是数据库引擎部分:另一部分是可嵌入到许多产

PL/SQL 编程(一)基础,变量,分支,循环,异常

SQL和PL/SQL: SQL 结构化查询语言(Structural Query Language),是用来访问和操作关系型数据库的一种标准通用语言,属于第四代语言(4GL).可以方便的调用相应语句来去的结果,特点是非过程化,使用的时候不用指明执行的具体方法,不用关注实现的细节,但是某些情况下满足不了复杂业务流程的需求. PL/SQL是 Procedure Language & Structured Query Language 的缩写.属于第三代语言(3GL),是一种过程化语言.PL/SQL是

在PL/SQL中使用日期类型

之前的文章介绍了在PL/SQL中使用字符串和数字了下.毫无疑问,字符串和数字很重要,但是可以确定的是没有哪个应用不依赖于日期的. 你需要记录事件的发生事件,人们的出生日期等等很多. 通常的使用方式是: 1)声明日期变量和常量 2)使用内建函数显示和修改日期值 3)执行日期相关计算 日期类型比字符串或数字更复杂.它有多个部分组成(年,月,日,时,分,秒等),而且关于一个有效的日期有很多规则. 本文将给你所有信息以便在PL/SQL程序中使用日期. 1.PL/SQL中的日期,时间戳和间隔(Interv

PL/SQL中如何让程序每隔几秒插入一条数据

在编写ORACLE PL/SQL中,如果需要程序执行中暂停几秒钟再继续执行,可以通过oracle内置的dbms_lock.sleep来实现,不过dbms_lock包需要用户自己安装. [[email protected] ~]# su - oracle [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon May 25 16:36:12 2015 Copyright (c

Oracle Study之--PL/SQL Developer软件错误

Oracle Study之--PL/SQL Developer软件错误 博文在51cto和CSDN同时开通 系统环境: 操作系统: Windows  XP(64) 软件:          PL/SQL Devoloper 8.04         软件,正常安装后,在使用过程中出现以下错误:                                                                            通过scott用户登录  出现以上错误 通过sqlpl

PL/SQL调用BIEE WebServices清理BI Server缓存

BIEE自身提供了几种缓存管理的方法,事件表或者是在物理层设置缓存的失效时间,又或者是调用SAPurgeAllCache()过程. 前两种方法都是被动的管理策略(事件表是定时轮询,失效时间是指定有效时长),比较低效:个人更中意主动的缓存管理策略.即一旦数据发生变化就主动清理缓存. 最佳的作法就是在etl结束的时候通过调用API完成缓存的清理,要实现这种方式就需要调用BI Server提供的缓存管理存储过程,BI Server提供如下缓存管理过程: SAPurgeCacheByQuery SAPu