oracle学习-PL SQL 存储过程中循环、触发器

PL SPL 提供了3中不同类型的循环结构

-- 实例:索引 loop_counter从1开始,到10 结束,循环共执行10次
FOR loop_counter IN 1 .. 10
LOOP
    ...可执行语句...
END LOOP;
-- 索引loop_counter从10开始,到1结束,循环共执行10次;
FOR loop_counter IN REVERSE 1 .. 10
LOOP
    ...可执行语句...
END LOOP;
-- 循环的执行范围取决于变量或者表达式的值:
FOR calc_index IN start_period_number .. LEAST(end_period_number, current_period)
LOOP
    ...可执行语句...
END LOOP;
--在这个例子中,循环的执行次数是在运行时候决定的。边界值只会在循环开始之前被求值一次,然后在整个循环生命期内都有效。
  • 简单循环或者无限循环
  • FOR循环(数值循环和游标循环)
  • WHILE循环

简单循环:LOOP关键字开始,以END LOOP语句结束,要靠循环体内的EXIT、EXIT WHEN 或者 RETURN来退出循环(或者异常抛出)

【EXIT WHEN后面跟布尔表达式,没有退出条件的话,就会变成无穷循环】

FOR循环:要使用数值型FOR循环,需要指定循环开始的整数值和结束整数值,PL/SQL会完成剩下的工作,迭代每一个中间取值,然后结束循环;

【需要最少量的代码、预先知道循环体需要执行的固定次数,这个范围在FOR和LOOP两个关键字之间已经给出了。  如果只想有限次数的执行一段代码,又不想过早的结束循环,就可以使用数值型的FOR循环】

游标型的FOR循环使用相同的基本结构,但需要提供一个明确的游标或者SELECT语句,而不是数值型FOR循环使用的整数的上下边界。

【如果你需要取出游标的每条记录依次处理,就可以使用游标FOR循环】

WHILE循环:WHILE循环和简单循环非常相似,一个关键的区别在于WHILE循环会在每次循环之前检查是否满足终止条件。

【下列场合使用WHILE循环: a.你事先无法确定会循环多少次;b.你想通过条件来终止循环;c.循环体不是必须要执行的】

每个结构包括两部分:循环边界和循环体。

关于简单循环中,什么时候用EXIT WHEN,什么时候使用拆分的EXIT:

1.如果只有一个条件表达式决定循环是否应该结束,这种情况下使用EXIT WHEN 最好

2.如果有多个退出条件,或者要根据不同的退出条语句件设置“返回值”时,使用IF或者CASE应该更合适,在这些语句的一个或多个子句中使用EXIT语句。

【REPEAT UNTIL】 PL SQL没有

在循环中,可以适当暂停(休眠)  DBMS_LOCK.sleep(10); -- 10秒钟内不做任何事情

PL SQL并没有提供可以指定特殊的累进步幅得“步进”的语法。在PL SQL的数值型FOR循环的各种变体中,递进的步幅总是以1为单位前进或者后退。

如果希望一个循环体能够以一种非平凡方式递进(即增长步幅不是1),你必须写一些聪明的代码,这里以简单例子: 在循环中使用简单的乘法,递归次数只需要一半:(不太会)

FOR even_number IN 1 .. 50
LOOP
    calc_values(even_number*2);
END LOOP;

循环的标签:可以通过标签给一个循环命名,格式:  <<label_name>> ,循环的标签要紧靠在LOOP语句前面

<<all_emps>>
FOR emp_rec IN emp_cur
LOOP
    ...
END LOOP;
-- 标签也可以跟在END LOOP保留词的后面,这是可选的
<<year_loop>>
WHILE year_number <= 1995
LOOP
    <<month_loop>>
    FOR month_number IN 1 .. 12
    LOOP
        ...
    END LOOP month_loop;
    year_number := year_number + 1;
END LOOP year_loop;

CONTINUE:使用这个语句可以从循环的本次迭代退出,紧接着立即进入下一次迭代。(无条件的CONTINUE和有条件的CONTINUE WHEN)

原文地址:https://www.cnblogs.com/huiya/p/9258473.html

时间: 2024-07-30 01:29:02

oracle学习-PL SQL 存储过程中循环、触发器的相关文章

Oracle数据库PL/SQL存储过程游标触发器

创建一个添加FOOD的存储过程 create or replace procedure add_food_pro (name in varchar,price in number,description in varchar) as  begin insert into food (f_name,f_price,description)values(name,price,description); commit; end; --下面的代码是调用存储过程 begin add_food_pro('糖

PL/SQL&amp;存储过程||存储函数&amp;触发器

plsql 有点:交互式  非过程化   数据操纵能力强   自动导航语句简单   调试简单   想率高 声明类型的方式 1.基本类型 2.引用变量 3.记录型变量 基本格式 declare 声明 begin exception end 判断语句 if:..then... else end if: 循环 loop 退出条件   exit when ...; end loop: 光标 cursor ---resltSet 返回多行数据 格式 cursor 表明 oper 打开 fetch 去一行光

Oracle数据库--PL/SQL存储过程和函数的建立和调用

1.存储过程建立的格式: create or replace procedure My_Procedure is begin --执行部分(函数内容); end; / 例子:(以hr表为例) create or replace procedure insert_procedure isbegininsert into JOBS values('MY_JOB','My Job',5000,10000);end;/ 2.存储过程调用 begininsert_procedure();end/ 3.函数

Oracle之PL/SQL学习笔记之触发器

Oracle之PL/SQL学习笔记之触发器 触发器是许多关系数据库系统都提供的一项技术.在ORACLE系统里,触发器类似过程和函数,都有声明,执行和异常处理过程的PL/SQL块. 触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行. 即触发器是当某个事件发生时自动地隐式运行.并且,触发器不能接收参数.所以运行触发器就叫触发或点火(firing).ORACLE事件指的是对数据库的表进行的INSERT. UPDATE及D

Oracle之PL/SQL学习笔记

自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家批评指正. PL/SQL定义:PL/SQL是由Oracle开发,专门用于Oracle的程序设计语言. PL---Procedural Language. SQL—Structure QueryLanguage.PL/SQL包括过程化语句和SQL语句     PL/SQL的单位:块. 一个块中可以嵌套

Oracle实践--PL/SQL综合之分页存储过程

当我们查看JDK API的时候,总会发现一些类说明写着,线程安全或者线程不安全,比如说StringBuilder中,有这么一句,"将StringBuilder 的实例用于多个线程是不安全的.如果需要这样的同步,则建议使用StringBuffer. ",那么下面手动创建一个线程不安全的类,然后在多线程中使用这个类,看看有什么效果. Count.java: [java] view plaincopy public class Count { private int num; public 

Oracle实践--PL/SQL基础之存储过程

PL/SQL基础之存储过程 存储过程:过程是用于完成特定任务的子程序(代码的集合) /* 子程序的优点:1.模块化,将程序分解为逻辑模块: 2.可重用性,可以被任意数目的程序调用: 3,可维护性,简化维护操作: 4.安全性:通过设置权限,使数据更安全 */ --存储过程1,打印HelloWorld create or replace procedure my_pro is --用于声明一些变量 v_string varchar2(20) :='helloworld!'; begin dbms_o

Oracle实践--PL/SQL基础之触发器和程序包

PL/SQL基础之触发器和程序包  程序包 /* 程序包:对相关存储过程,函数,变量,游标和异常等对象的封装 有声明和主体组成 优点:1.模块化:2.更轻松的应用程序设计;3.信息隐藏;4.性能更佳 */ --程序包的声明:关键字:package is end create or replace package my_pack as procedure packageTest(v_num number); end my_pack;--也可以是 end; --程序包的主体 create or re

Oracle之PL/SQL学习笔记之数据类型(三)

Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到动态执行程序,同时也可以利用变量在PL/SQL内部进行值得传递,甚至可以把值传递出去,最终返回给用户,由此可见,变量是PL/SQL不可或缺的一部分. 1. Oracle预定义的普通数据类型(常见的数据类型) 类型 子类 说明 Oracle中的范围 char Character,String Rowi