ORACLE PL SQL编程详解之三.doc_第1页
ORACLE PL SQL编程详解之三.doc_第2页
ORACLE PL SQL编程详解之三.doc_第3页
ORACLE PL SQL编程详解之三.doc_第4页
ORACLE PL SQL编程详解之三.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 ORACLE PL SQL 编程详解之三编程详解之三 作者 来源 2011 05 30 23 14 01 我要评论 4 核心提示 本篇主要内容如下 3 1 条件语句 3 2 CASE 表达式 3 3 循环 3 4 标号和 GOTO 3 5 NULL 语句 介绍介绍 PL SQL 的流程控制语句的流程控制语句 包括如下三类包括如下三类 控制语句 IF 语句 循环语句 LOOP 语句 EXIT 语句 顺序语句 GOTO 语句 NULL 语句 3 1 条件语句条件语句 IF THEN PL SQL 和 SQL 语句 END IF IF THEN PL SQL 和 SQL 语句 ELSE 其它语句 END IF IF THEN PL SQL 和 SQL 语句 ELSIF THEN 其它语句 ELSIF THEN 2 其它语句 ELSE 其它语句 END IF 提示提示 ELSIF 不能写成不能写成 ELSEIF 例例 1 DECLARE v empno employees employee id TYPE V salary employees salary TYPE V comment VARCHAR2 35 BEGIN SELECT salary INTO v salary FROM employees WHERE employee id v empno IF v salary 1500 THEN V comment 太少了 加点吧 ELSIF v salary 3000 THEN V comment 多了点 少点吧 ELSE V comment 没有薪水 END IF DBMS OUTPUT PUT LINE V comment exception when no data found then DBMS OUTPUT PUT LINE 没有数据 when others then DBMS OUTPUT PUT LINE sqlcode sqlerrm END 例例 2 2 DECLARE v first name VARCHAR2 20 v salary NUMBER 7 2 BEGIN SELECT first name salary INTO v first name v salary FROM employees WHERE employee id DBMS OUTPUT PUT LINE v first name 雇员的工资是 v salary IF v salary 10000 THEN 3 DBMS OUTPUT PUT LINE 工资低于 10000 ELSE IF 10000 v salary AND v salary TO DATE 01 1 月 90 THEN v bonus 800 ELSIF v hire date TO DATE 01 1 月 88 THEN v bonus 1600 ELSE v bonus 2400 END IF DBMS OUTPUT PUT LINE v first name 雇员的雇佣日期是 v hire date 奖金是 v bonus END 3 2 CASE 表达式表达式 格式一 CASE 条件表达式 WHEN 条件表达式结果 1 THEN 语句段 1 WHEN 条件表达式结果 2 THEN 语句段 2 WHEN 条件表达式结果 n THEN 语句段 n ELSE 条件表达式结果 4 END 格式二 CASE WHEN 条件表达式 1 THEN 语句段 1 WHEN 条件表达式 2 THEN 语句段 2 WHEN 条件表达式 n THEN 语句段 n ELSE 语句段 END 例例 4 4 DECLARE V grade char 1 UPPER V appraisal VARCHAR2 20 BEGIN V appraisal CASE v grade WHEN A THEN Excellent WHEN B THEN Very Good WHEN C THEN Good ELSE No such grade END DBMS OUTPUT PUT LINE Grade v grade Appraisal v appraisal END 例例 5 5 DECLARE v first name employees first name TYPE v job id employees job id TYPE v salary employees salary TYPE v sal raise NUMBER 3 2 BEGIN SELECT first name job id salary INTO v first name v job id v salary FROM employees WHERE employee id 5 CASE WHEN v job id PU CLERK THEN IF v salary 3000 THEN v sal raise 08 ELSE v sal raise 07 END IF WHEN v job id SH CLERK THEN IF v salary 4000 THEN v sal raise 06 ELSE v sal raise 05 END IF WHEN v job id ST CLERK THEN IF v salary 3500 THEN v sal raise 04 ELSE v sal raise 03 END IF ELSE DBMS OUTPUT PUT LINE 该岗位不涨工资 v job id END CASE DBMS OUTPUT PUT LINE v first name 的岗位是 v job id 的工资是 v salary 工资涨幅是 v sal raise END 3 3 循环循环 1 简单循环简单循环 LOOP 要执行的语句 EXIT WHEN 条件满足 退出循环语句 END LOOP 例例 6 6 DECLARE int NUMBER 2 0 BEGIN LOOP int int 1 DBMS OUTPUT PUT LINE int 的当前值为 int EXIT WHEN int 10 END LOOP END 6 2 WHILE 循环循环 WHILE LOOP 要执行的语句 END LOOP 例例 7 7 DECLARE x NUMBER 1 BEGIN WHILE x 10 LOOP DBMS OUTPUT PUT LINE X 的当前值为 x x x 1 END LOOP END 3 数字式循环数字式循环 FOR 循环计数器 IN REVERSE 下限 上限 LOOP 要执行的语句 END LOOP 循环标签 每循环一次 循环变量自动加 1 使用关键字 REVERSE 循环变量自动减 1 跟在 IN REVERSE 后面的数字必须是从小到大的顺序 而且必须是整数 不能是变量或表达式 可以使用 EXIT 退出循环 例例 8 8 BEGIN FOR int in 1 10 LOOP DBMS OUTPUT PUT LINE int 的当前值为 int END LOOP END 例例 9 9 CREATE TABLE temp table num col NUMBER DECLARE V counter NUMBER 10 7 BEGIN INSERT INTO temp table num col VALUES v counter FOR v counter IN 20 25 LOOP INSERT INTO temp table num col VALUES v counter END LOOP INSERT INTO temp table num col VALUES v counter FOR v counter IN REVERSE 20 25 LOOP INSERT INTO temp table num col VALUES v counter END LOOP END DROP TABLE temp table 例例 10 10 DECLARE TYPE jobids varray IS VARRAY 12 OF VARCHAR2 10 定义一个 VARRAY 数据类型 v jobids JOBIDS VARRAY 声明一个具有 JOBIDS VARRAY 数据类型的变量 v howmany NUMBER 声明一个变量来保存雇员的数量 BEGIN 用某些 job id 值初始化数组 v jobids jobids varray FI ACCOUNT FI MGR ST CLERK ST MAN 用 FOR LOOP END LOOP 循环使用每个数组成员的值 FOR i IN v jobids FIRST v jobids LAST LOOP 针对数组中的每个岗位 决定该岗位的雇员的数量 SELECT count INTO v howmany FROM employees WHERE job id v jobids i DBMS OUTPUT PUT LINE 岗位 v jobids i 总共有 TO CHAR v howmany 个雇员 END LOOP END 例例 1111 在 While 循环中嵌套 loop 循环 求 100 至 110 之间的素数 DECLARE v m NUMBER 101 v i NUMBER v n NUMBER 0 BEGIN 8 WHILE v m v m 1 END LOOP IF v i 0 THEN v n v n 1 DBMS OUTPUT PUT LINE 第 v n 个素数是 v m END IF v m v m 2 END LOOP END 3 4 4 标号和标号和 GOTO PL SQL 中 GOTO 语句是无条件跳转到指定的标号去的意思 语法如下 GOTO label 标号是用 括起来的标识符 注意注意 在以下地方使用是不合法的 编译时会出错误 跳转到非执行语句前面 跳转到子块中 跳转到循环语句中 跳转到条件语句中 从异常处理部分跳转到执行 从条件语句的一部分跳转到另一部分 例例 1212 DECLARE V counter NUMBER 1 9 BEGIN LOOP DBMS OUTPUT PUT LINE V counter 的当前值为 V counter V counter v counter 1 IF v counter 10 THEN GOTO labelOffLOOP END IF END LOOP DBMS OUTPUT PUT LINE V counter 的当前值为 V counter END 例例 13 DECLARE v i NUMBER 0 v s NUMBER 0 BEGIN v i v i 1 IF v i 1000 THEN v s v s v i GOTO label 1 END IF DBMS OUTPUT PUT LINE v s END 3 5 5 NULL 语句语句 在 PL SQL 程序中 NULL 语句是一个可执行语句 可以用 null 语句来说明 不用做任 何事情 的意思 相当于一个占位符或不执行任何操作的空语句 可以使某些语句变得有意 义 提高程序的可读性 保证其他语句结构的完整性和正确性 如 例例 14 DECLARE BEGIN IF v num IS NULL THEN GOTO labelPrint END IF 10 NULL 不需要处理任何数据 END 例例 15 DECLARE v emp id employees employee id TYPE v first name employees first name TYPE v salary employees salary

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论