`
LeeYee
  • 浏览: 70040 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PL/SQL学习笔记[5]-流程控制语句

    博客分类:
  • SQL
阅读更多

1 条件分支语句

1.1 IF语句

语法

 写道
IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;
 

 

示例

 

DECLARE
	v_age NUMBER(3);
BEGIN
	SELECT age INTO v_age FROM user
	WHERE lower(name) = lower('&&name');
	IF v_age < 20 THEN
		UPDATE user SET age = v_age*2 WHERE lower(name) = lower('&&name');
	ELSIF v_age < 40 THEN
	  UPDATE user SET age = v_age*3 WHERE lower(name) = lower('&&name');
	ELSE
		UPDATE user SET age = v_age/2 WHERE lower(name) = lower('&&name');
	END IF;
END;
 

 

1.2 CASE语句

语法

 

 写道
[单一条件]
CASE selector
WHEN expression1 THEN sequence_of_statements1;
WHEN expression1 THEN sequence_of_statements2;
...
WHEN expression1 THEN sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE;

[多条件]

CASE
WHEN selector_condition1 THEN sequence_of_statements1;
WHEN selector_condition2 THEN sequence_of_statements2;
...
WHEN selector_conditionN THEN sequence_of_statementsN;
[ELSE sequence_of_statementsN+1;]
END CASE;
 

 

示例

 

DECLARE
	v_uid  user.uid%TYPE;
BEGIN
	v_uid := &id;
	CASE v_uid
		WHEN 1 THEN UPDATE user SET age = 20 WHERE uid = v_uid;
		WHEN 2 THEN UPDATE user SET age = 40 WHERE uid = v_uid;
		ELSE
			dbms_out.put_line('不存在该用户');
	END CASE;
END;

DECLARE
	v_uid  user.uid%TYPE;
BEGIN
	v_uid := &id;
	CASE 
		WHEN v_uid == 1 THEN UPDATE user SET age = 20 WHERE uid = v_uid;
		WHEN v_uid == 2 THEN UPDATE user SET age = 40 WHERE uid = v_uid;
		ELSE
			dbms_out.put_line('不存在该用户');
	END CASE;
END;
 

 

2 循环语句

2.1 LOOP 循环

语法

 

 写道
LOOP
statement1;
EXIT [WHEN condition];
END LOOP;

使用该语句statement1至少会被执行一次。相当于do...while

 

示例

 

DELCARE
	i INT :=1;
BEGIN
	LOOP
		UPDATE user SET createDate = SYSDATE WHERE uid = i;
		EXIT WHEN i = 10 ;
		i := i+1;
		
		
	END LOOP;
	COMMIT;
END;

 

2.2 WHILE 循环

语法

 

 写道
WHILE condition LOOP
statement1;
statement2;
...
END LOOP;
 

 

示例

 

DECLARE 
	i INT := 1;
BEGIN
	WHILE i <= 10 LOOP
		UPDATE user SET createDate = SYSDATE WHERE uid = i;
		i := i+1;
	END LOOP;
	COMMIT;			
END;
 

 

 

2.3 FOR 循环

语法

 

 写道
FOR counter IN [REVERSE]
min_bound..upper_bound LOOP
statement1;
statement1;
...
END LOOP;

 

counter : 循环控制变量,由Oracle隐含定义,不需要显示定义

min_bound、upper_bound :循环控制变量的上下界;

默认情况下FOR循环在每执行一次后,控制变量会自增一;如果指定REVERSE选项,则会减一

 

示例

 

BEGIN
	FOR i IN 1..10 LOOP
		UPDATE user SET createDate = SYSDATE WHERE uid = i;
	END LOOP;
	COMMIT;
END;
 

 

2.4 嵌套循环和标号

 

-- 该示例中的<<waibu>>、<<neibu>>为标号,该名称可以自定义。
DECLARE
	result INT;
BEGIN
	<<waibu>>
	FOR i IN 1..10 LOOP
		<<neibu>>
		FOR j IN 1..10 LOOP
		result := i * j;
		dbms_output.put_line(result);
		EXIT waibu WHEN result = 10; -- 当 result=10 时,退出外部循环,本例中是当i=5时退出。相当于调用break语句
		EXIT WHEN j = 2; -- 当 j = 2 时,退出内部循环。相当于调用break语句
		END LOOP neibu;
	END LOOP waibu;
	dbms_output.put_line(result);
END;
 

 

3 顺序控制语句

3.1 GOTO 语句

语法

 

 写道
GOTO label_name;

 

 GOTO语句用于跳转到特定标号处。一般不建议使用

 

示例

 

DECLARE
	i INT := 1; 
BEGIN 
	LOOP
		IF i = 10 THEN
			GOTO jump_loop;
		END IF;
		EXIT WHEN i > 11;
		dbms_output.put_line('i-->'||i); -- 这条语句是不会被执行的!
		i := i+1;
	END LOOP;
	<<jump_loop>>
		dbms_output.put_line('i == 10 ! ');
END;
 

 

3.2 NULL 语句

NULL 语句不执行任何操作,并且直接将控制传递到下一条语句。使用NULL可以提高PL/SQL程序的可读性

 

DECLARE
	v_uid user.uid%TYPE := &di;
	v_age user.age%TYPE;
BEGIN
	SELECT age INTO v_age FROM user WHERE uid = v_uid;
	IF v_age < 20 THEN
		UPDATE user SET age = 100 WHERE uid = v_uid;
		commit;
	ELSE
		NULL;
	END IF;
END;
 

 

0
0
分享到:
评论

相关推荐

    Oracle笔记,主要是关于SQL以及PL/SQL部分

    最近学习Oracle时写的笔记,对于Oracle中常用的数据库对象、函数,常用语句,PL/SQL都有涉及到,学习的时候是看的动力节点的视频,其中部分知识点摘自网络

    Oracle 入门文档

    Oracle笔记 六、PL/SQL简单语句块、变量定义 Oracle笔记 七、PL/SQL 异常处理 Oracle笔记 八、PL/SQL跳转/判断/循环语句块 Oracle笔记 九、PL/SQL 游标的使用 Oracle笔记 十、PL/SQL存储过程 Oracle笔记 十一、...

    Java/JavaEE 学习笔记

    PL/SQL学习笔记............358 第一章 PL/SQL概述........................358 第二章 PL/SQL程序结构................359 第三章 PL/SQL数据类型................362 第四章 PL/SQL中的控制语句........368 第五章...

    成功之路:Oracle11g学习笔记.pdf

    在介绍Oracle系统管理的知识以后,将介绍与开发相关的内容(如PL/SQL基础知识、存储过程、函数、包等),并介绍数据库性能调整,《成功之路:Oracle 11g学习笔记》重点介绍SQL语句调优。SQL语句调优是《成功之路:Oracle...

    ORACLE 游标学习笔记

    在PL/SQL中为所有SQL数据操纵语句(包括返回一行的select)隐式声明游标,称为隐式游标的原因是用户不能直接命名和控制此类游标.当用户在PL/SQL中使用数据操纵语言(DML)时,Oracle预先定义一个名为SQL的隐式游标

    oracle学习笔记

    超完整的oracle学习笔记! 包括3部分:1、sql语句2、pl/sql编程3、其他信息等

    J2EE学习笔记(J2ee初学者必备手册)

    PL/SQL学习笔记............358 第一章 PL/SQL概述........................358 第二章 PL/SQL程序结构................359 第三章 PL/SQL数据类型................362 第四章 PL/SQL中的控制语句........368 第五章...

    成功之路 Oracle 11g 中文学习笔记

    成功之路 Oracle 11g 中文学习笔记 专为开发人员编写,先引导开发新手熟悉Oracle环境,然后进入数据库开发,并要掌握项目开发的一些技巧。开发技巧展示是本书一大特色(这一点很值得资深的开发人员借鉴)! 本书共24...

    韩顺平oracle学习笔记

    韩顺平oracle学习笔记 第0讲:如何学习oracle 一、如何学习oracle Oracle目前最流行的数据库之一,功能强大,性能卓越。学习oracle需要具备一定基础: 1.学习过一门编程语言(如:java ,c) 2.最好学习过一门别的...

    ORACLE_PlSql-甲骨文学习笔记

    四、ORACLE PL/SQL简介 5 1 块结构 5 2 变量和类型 6 3 条件逻辑 6 4 循环 7 5 游标 8 №1声明一些变量,用于保存select语句的返回的列值 8 №2声明游标,并指定select语句 8 №3打开游标 8 №4从游标中获取记录 9 ...

    ORACLE学习笔记2:日常应用、深入管理、性能优化.

    第11章 PL/SQL语言基础 第12章 存储过程和触发器 第13章 游标 第14章 任务调度 第15章 事务与锁定 第3篇 系统优化 第16章 数据库内存和进程的配置与优化 第17章 常用性能监测、分析和优化工具 第18章 对SQL...

    Java学习笔记-个人整理的

    {1.9}流程控制}{31}{section.1.9} {1.9.1}\texttt {if\ldots esle\ldots }}{31}{subsection.1.9.1} {1.9.2}\texttt {switch}}{31}{subsection.1.9.2} {1.9.3}\texttt {while}}{32}{subsection.1.9.3} {1.9.4}\...

    Oracle整理笔记.doc

    Oracle学习笔记包括:Oracle概述,sql基础,PL/SQL的用法,Oracle基本操作,数据库用户管理,数据库空间管理,备份与回复机制,控制文件及日志文件的管理,数据库控制,Oracle数据库的安全管理,留言板系统,oracle ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    oracle数据库笔记

    3. PL/SQL (Procedure Language) 31 二. SQL*Plus 31 1.启动 SQL*Plus 单行编辑 31 2.启动iSQL*Plus 多行编辑 31 3.退出 32  直接关闭 32  输入:Exit 或 quit 32 三. 本书所使用的示例模式 32 1.Vendition:...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

Global site tag (gtag.js) - Google Analytics