Oracle中PLSQL的循环语句

Oracle中PLSQL的循环语句

在PL/SQL中可以使⽤LOOP语句对数据进⾏循环处理,利⽤该语句可以循环执⾏指定的语句序列。常⽤的LOOP循环语句包含3种形式:基

本的LOOP、WHILE...LOOP和FOR...LOOP。

LOOP语句的基本语法结构如下:

[<>]

LOOP

statement...

END LOOP [label_name]

【语法说明】<>:LOOP结构的标签,是可选项。

LOOP:LOOP循环开始标志。

statement:LOOP语句中循环执⾏的语句序列。

END LOOP:LOOP循环结束标志,可以添加LOOP结构的标签。

1.基本的LOOP语句

实例:要求声明变量,每次循环都需要为变量增加数字1,并输出结果。当变量值⼤于3时,退出循环操作。

a、利⽤EXIT...WHEN结束循环操作。

SQL> set serveroutput on;

SQL> --exit when

SQL> declare

2 v_rlt number(8):=-3;

3 begin

4 <>

5 loop

6 dbms_output.put_line('v_rlt = '||v_rlt);

7 v_rlt:=v_rlt+1;

8 exit fst_loop when v_rlt > 3;

9 end loop;

10 dbms_output.put_line('LOOP循环已经结束!');

11 end;

12 /

v_rlt = -3

v_rlt = -2

v_rlt = -1

v_rlt = 0

v_rlt = 1

v_rlt = 2

v_rlt = 3

LOOP循环已经结束!

PL/SQL procedure successfully completed

b、利⽤IF...EXIT语句结束循环

SQL> --if exit

SQL> declare

2 v_rlt number(8):=-3;

3 begin

4 <>

5 loop

6 dbms_output.put_line('v_rlt = '||v_rlt);

7 v_rlt:=v_rlt+1;

8 if v_rlt > 3 then

9 dbms_output.put_line('变量的值已经⼤于3,当前值为'||v_rlt);

10 exit fst_loop;

11 end if;

12 end loop fst_loop;

13 dbms_output.put_line('LOOP循环已经结束!');

14 end;

15 /

v_rlt = -3

v_rlt = -2

v_rlt = -1

v_rlt = 0

v_rlt = 1

v_rlt = 2

v_rlt = 3

变量的值已经⼤于3,当前值为4LOOP循环已经结束!

PL/SQL procedure successfully completed

2、WHILE...LOOP结构 WHILE...LOOP结构和基本的LOOP语句不同,它本⾝可以结束LOOP循环。WHILE关键词后⾯需要有布尔表达式,当WHILE后⾯的布尔

表 达式为TRUE时,则循环体重的语句序列被执⾏1次,然后会重新判断WHILE后⾯的表达式是否为TRUE,只有当WHILE后的布尔表达式

为FALSE 时,才结束整个LOOP循环。

该语句结构的相关语法如下:

[<>]

WHILE boolean_expression

LOOP

statement...

END LOOP [label_name];

【语法说明】boolean_expression:布尔表达式。

statement:语句序列,当boolean_expression为TRUE时,该语句序列可获得执⾏权。

c、WHILE...LOOP结构

SQL> --while...loop

SQL> declare

2 v_rlt number(8):=-3;

3 begin

4 <>

5 while(v_rlt < 4)

6 loop

7 dbms_output.put_line('v_rlt = '||v_rlt);

8 v_rlt:=v_rlt+1;

9 end loop while_loop;

10 dbms_output.put_line('WHILE循环已经结束!');

11 end;

12

13 /

v_rlt = -3

v_rlt = -2

v_rlt = -1

v_rlt = 0

v_rlt = 1

v_rlt = 2

v_rlt = 3

WHILE循环已经结束!

PL/SQL procedure successfully completed

3.FOR...LOOP结构

FOR...LOOP语句可以遍历某个范围的整数,该范围被FOR和LOOP关键词封闭。⾸次进⼊循环时,循环范围将被确定,并且以后不会再

次计算。每循环⼀次,循环指数将会⾃动增加1。

FOR...LOOP语句的语法结构如下:

[<>]

FOR index_name IN

[ REVERSE ]

lower_bound .. upper_bound

LOOP

statement...

END LOOP [label_name];

【语法说明】index_name:循环计数器,是⼀个变量,它可以得到当前的循环指数。需要注意的是,不能为其⼿⼯赋值。

REVERSE:可选项,指定循环⽅式。默认的循环⽅式由下标(lower_bound)到上标(upper_bound)。使⽤该选项则从上标界到下标界。

lower_bound:循环范围的下标界。

upper_bound:循环范围的上标界。

下标和上标之间的".."不能省略。

d、FOR...LOOP结构

SQL> --for..loop

SQL> begin

2 for v_rlt in -3..3 loop

3 dbms_output.put_line('v_rlt = '||v_rlt);

4 end loop;

5 dbms_output.put_line('FOR循环已经结束!');

6 end;

7 /

v_rlt = -3

v_rlt = -2

v_rlt = -1

v_rlt = 0

v_rlt = 1

v_rlt = 2

v_rlt = 3

FOR循环已经结束!

PL/SQL procedure successfully completed

PL/SQL的三种形式的循环:

1.LOOP(⽆条件循环):

loop

statements;

end loop;

2.WHILE(有条件循环):

while condition loop

statements;

end loop;

3.FOR(固定次数循环):

for counter in value1 .. value2

loop

statements;

end loop;

实例:分别⽤三种循环输出1-100

loop:

1. declare i number;

2. begin

3. i := 1;

4. loop

5. if i > 100 then

6. goto quit;

7. end if;

8. dbms_output.put_line(i);

9. i := i + 1;

10. end loop;

11. <>

12. null;

13. end;

while:

1. declare

2. i number;

3. begin

4. i := 1;

5. while i<=100 loop

6. dbms_output.put_line(i);

7. i := i+1;

8. end loop;

9. end;

for:

1. declare

2. i number;

3. begin

4. for i in 1..100

5. loop

6. dbms_output.put_line(i);

7. end loop;

8. end;

合集下载

oracleplsql之sql中的---if语句

oracleplsql之sql中的---if语句

oracleplsql之sql中的---if语句

pl/sql中为了控制程序的执⾏⽅向,引进了if语句,if语句有多种形式

if....end if 语句 语法如下

if 条件表达式 then

pl/sql语句

end if;

程序演⽰如下:

SQL> set serveroutput on;

SQL> declare

a number;

b number;

begin

a:=1;

b:=2;

if a>b then

dbms_output.put_line('a'||'>'||'b');

else

dbms_output.put_line('a'||'<'||'b');

end if;

end;

a

PL/SQL procedure successfully completed

if...elslf..elsif...elsif end if

if 条件表达式 then

pl/sql语句

elslf 条件表达式2 then

pl/sql语句2

elslf 条件表达式3 then

pl/sql语句3

else

pl/sql语句4

end if;

演⽰程序:

declare

year number:=2016;

flag boolean;

begin

if mod(year,4)<>0 then

flag:=false;

elsif mod(year,100)<>0 then

flag:=true;

elsif mod(year,400)<>0 then

flag:=false;

elseflag:=true;

end if;

if flag then

dbms_output.put_line('闰年');

else

dbms_output.put_line('平年');

end if;

end;

结果:

闰年

PL/SQL procedure successfully completed

精通 oracle 10g plsql 编程-学习笔记

精通 oracle 10g plsql 编程-学习笔记

1. PL/SQL综述

本章学习目标,了解如下内容:

PL/SQL的功能和作用

PL/SQL 的优点和特征;

Oracle 10g、Oracle9i 的PL/SQL新特征

1.1. SQL简介

1.1.1. SQL语言特点

SQL语言采用集合操作方式

1.1.2. SQL语言分类

 数据查询语言(SELECT语句):检索数据库数据。

 数据操纵语言(DML):用于改变数据库数据。包括insert,update和 delete三条语句。

 事务控制语言(TCL):用于维护数据库的一致性,包括commit,rollback和savepoint 三条语句

 数据定义语言(DDL):用户建立、修改和删除数据库对象。

 数据控制语言(DDL):用于执行权限授予和收回操作。包括grant 和revoke两条命令。

1.1.3. SQL 语句编写规则

 SQL关键字不区分大小写

 对象名和列名不区分大小写

 字符值和日期值区分大小写

 书写格式随意

1.2. PL/SQL简介

1.3. Oracle 10G PL/SQL 新特征

2. PL/SQL开发工具

本章学习目标:

学会使用SQL*PLUS

学会使用 PL/SQL developer;

学会使用 Procedure Builder。

2.1. SQL*PLUS

在命令行运行SQL*Plus Sqlplus [username]/[password] [@server]

3. PL/SQL 基础

学习目标:

 了解PL/SQL块的基本结构以及PL/SQL块的分类;

 学会在PL/SQL块中定义和使用变量

 学会在PL/SQL块中编写可执行语句;

 了解编写PL/SQL代码的指导方针;

 了解Oracle 10g的新特征——新数据类型BINARY_FLOAT 和BINARY_DOUBLE,以及指定字符串文本的新方法。

3.1. PL/SQL 块简介

plsql的set语句用法_概述说明以及解释

plsql的set语句用法_概述说明以及解释

plsql的set语句用法 概述说明以及解释

1. 引言

1.1 概述

本文将重点介绍和解释PL/SQL的SET语句的用法。PL/SQL是Oracle数据库中一种编程语言,用于存储过程、触发器和函数等对象的开发。SET语句作为PL/SQL中最基本且常用的语句之一,具有灵活性和强大功能,在数据处理和逻辑控制方面起到了重要作用。

1.2 文章结构

本文主要分为五个部分。首先是引言部分,对文章进行概要介绍。接下来是PL/SQL的SET语句的基本用法及使用场景进行详细讲解。然后是对SET语句的详细说明和示例,包括赋值操作符、条件判断和逻辑运算符以及查询子句和聚合函数的使用方法。第四部分将通过应用实例分析SET语句在PL/SQL编程中的具体应用,涵盖更新表中记录、处理游标数据集合以及执行动态SQL操作等方面。最后是总结与展望部分,对PL/SQL的SET语句进行优势特点总结,并展望未来其在PL/SQL开发中的趋势与发展。

1.3 目的

本文旨在全面阐述和解释PL/SQL的SET语句用法,并通过实例演示其在实际应用中的作用。通过阅读本文,读者将能够掌握SET语句的基本语法和使用场景,了解SET语句中赋值操作符、条件判断和逻辑运算符以及查询子句和聚合函数的使用方法。此外,读者还将通过应用实例的分析了解如何使用SET语句来更新表中的记录、处理游标数据集合以及执行动态SQL操作。最后,在总结与展望部分,读者将对PL/SQL的SET语句有更全面和深入的认识,并对未来其在PL/SQL开发中的趋势与发展有一定预期。

2. PL/SQL的SET语句用法

2.1 什么是PL/SQL的SET语句

PL/SQL的SET语句是一种用于在程序中设置变量值或表字段值的命令。它提供了一种简单而有效的方法来更新数据或执行计算操作。

2.2 SET语句的基本语法

PL/SQL中的SET语句通常由关键字SET、要设置值的目标对象以及赋予该对象新值组成。SET语句可以用于设置各种类型的变量或数据库表字段。

Oracle PLSQL概述

Oracle  PLSQL概述

Oracle PL/SQL概述

由于SQL只是一种声明式语言,它没有流程控制;也不存在变量,只有表或者列,所以不能将某个SQL语句的执行结果传递给另外一个语句。为了实现该目的,用户不得不使用一条更复杂的语句。而且,SQL语句中更没有可以控制程序流程的IF或LOOP语句。

PL/SQL是过程化的结构查询语言(Procedural Language/Structured Query Language),它可以弥补SQL语句的不足。在PL/SQL中可以通过IF和LOOP语句控制程序的执行流程,并且可以定义变量,以便利用这些变量在语句之间传递数据信息。PL/SQL是Oracle的专用语言,它是对标准SQL语言的扩展,并且SQL语句可以嵌套在PL/SQL程序代码中,将SQL的数据处理能力和PL/SQL的过程处理能力结合在一起。

在Oracle数据库内置了PL/SQL处理引擎,常用的开发工具是Oracle附带的SQL*Plus。实际上,SQL*Plus只是用于将SQL语句或PL/SQL程序发送到数据库,并将处理后的结果显示在屏幕上的工具,并且用户也可以选择其他的工具运算SQL和PL/SQL程序。

PL/SQL程序的基本结构称为块,每一个块都包含了PL/SQL语句和SQL语句。典型的PL/SQL块的结构如下:

[declare

declareation_statements]

begin

executable_statements

[exception

exception_handing_statements]

end;

PL/SQL程序块中的每一条语句都必须以分号结束,SQL语句可以是多行的,但分号表示该语句的结束。一行中可以有多条SQL语句,但是他们之间必须以分号分隔。PL/SQL程序的注释是由--表示。

从上面的语法规则中可以发现,一个PL/SQL程序块分为三部分:声明部分、执行部分和异常处理部分。声明部分是可选的,它由关键字DECLARE开始,到BEGIN关键字结束。在这部分可以声明一些PL/SQL变量、常量、游标和异常的定义等。当基本块结束后,声明部分中的所有内容均不复存在。在某个基本块中所声明的内容只能被在该块中使用,其他的基本块不能使用。

plsql cursor的用法

plsql cursor的用法

plsql cursor的用法

PL/SQL Cursor的用法

PL/SQL是一种基于Oracle数据库的编程语言,它提供了许多功能和特性来处理和操作数据库。其中一个重要的特性就是PL/SQL Cursor,它用于检索和处理数据库中的数据结果集。

Cursor可以被看作是一个指针,它允许我们在数据库表中遍历数据行,并对每一行进行操作。以下是PL/SQL Cursor的一些常见用法:

1. 声明和打开Cursor:

在PL/SQL程序中,我们首先需要声明一个Cursor并指定查询语句。例如:

```sql

DECLARE

CURSOR my_cursor IS

SELECT * FROM employees;

BEGIN

-- 打开Cursor

OPEN my_cursor;

...

END;

```

在上述例子中,我们声明了一个名为my_cursor的Cursor,并使用SELECT语句检索employees表中的所有数据行。 2. 遍历Cursor结果集:

一旦Cursor被打开,我们可以使用循环来遍历Cursor的结果集,并对每一行进行操作。例如:

```sql

DECLARE

CURSOR my_cursor IS

SELECT * FROM employees;

emp_record employees%ROWTYPE;

BEGIN

OPEN my_cursor;

LOOP

-- 获取下一行数据

FETCH my_cursor INTO emp_record;

EXIT WHEN my_cursor%NOTFOUND;

-- 对数据行进行操作

oracle plsql编译对象

oracle plsql编译对象

oracleplsql编译对象在OraclePL/SQL中,编译对象是将PL/SQL代码转换为可执行的数据库对象的过程。可以通过以下方式编译PL/SQL对象:1.存储过程和函数:

使用`CREATEPROCEDURE`或`CREATEFUNCTION`语句创建存储过程或函数时,系统会自动将其编译。如果在创建后需要重新编译,可以使用以下语句:

```sqlALTERPROCEDUREprocedure_nameCOMPILE;

ALTERFUNCTIONfunction_nameCOMPILE;

```

2.包(Package):

对于PL/SQL包,使用`CREATEPACKAGE`语句创建包时,系统也会自动编译包中的所有过程、函数和变量。如果需要重新编译包,可以使用以下语句:

```sql

ALTERPACKAGEpackage_nameCOMPILEPACKAGE;

```

3.触发器(Trigger):使用`CREATETRIGGER`语句创建触发器时,系统会自动编译触发器的触发事件。如果需要重新编译触发器,可以使用以下语句:

```sql

ALTERTRIGGERtrigger_nameCOMPILE;

```4.类型(Type):

对于PL/SQL类型,使用`CREATETYPE`语句创建类型时,系统会自动编译类型定义。如果需要重新编译类型,可以使用以下语句:

```sqlALTERTYPEtype_nameCOMPILE;

```

5.视图(View):

对于包含PL/SQL的视图,使用`CREATEVIEW`语句创建视图时,系统会自动编译视图的查询语句。如果需要重新编译视图,可以使用以下语句:

```sql

ALTERVIEWview_nameCOMPILE;

```

通过使用上述语句,你可以对指定的PL/SQL对象进行重新编译,以确保其最新版本在数据库中可用。

PLSQL函数

plsql常用方法

在SQLPLUS下,实现中-英字符集转换

alter session set nls_language='AMERICAN';

alter session set nls_language='SIMPLIFIED CHINESE';

主要知识点:

一、有关表的操作

1)建表

create table test as select * from dept; --从已知表复制数据和结构

create table test as select * from dept where 1=2; --从已知表复制结构但不包括数据

2)插入数据:

insert into test select * from dept;

二、运算符

算术运算符:+ - * / 可以在select 语句中使用

连接运算符:|| select deptno|| dname from dept;

比较运算符:> >= = != < <= like between is null in

逻辑运算符:not and or

集合运算符: intersect ,union, union all, minus

要求:对应集合的列数和数据类型相同

查询中不能包含long 列

列的标签是第一个集合的标签

使用order by时,必须使用位置序号,不能使用列名

例:集合运算符的使用:

intersect ,union, union all, minus

select * from emp intersect select * from emp where deptno=10 ;

select * from emp minus select * from emp where deptno=10;

select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重复行

Oracle 11G

Oracle 11G

Oracle 11g是甲骨文公司在2007年年7月12日推出的最新数据库软件,Oracle 11g有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。相对过往版本而言,Oracle 11g具有了与众不同的特性。

·数据库重演

数据库重演(Database Replay)这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据库中创建的测试数据库上,然后重演负责以测试系统调优后的效果。 ·

SQL重演(SQL Replay)

和前一特性类似。但只是捕捉SQL负载部分,而不是全部负载。 ·

计划管理(Plan Management)

这一特性允许你将某一特定语句的查询计划固定下来,无论统计数据变化还是数据库版本变化都不会改变她的查询计划。 ·

自动诊断知识库

(Automatic Diagnostic Repository ADR)

当Oracle探测到重要错误时,会自动创建一个事件(incident),并且捕捉到和这一事件相关的信息,同时自动进行数据库健康检查并通知DBA。此外,这些信息还可以打包发送给Oracle支持团队。 ·

事件打包服务

(Incident Packaging Service)

如果你需要进一步测试或者保留相关信息,这一特性可以将与某一事件相关的信息打包。并且你还可以将打包信息发给oracle支持团队。 ·

基于特性打补丁

(Feature Based Patching)

在打补丁包时,这一特性可以使你很容易区分出补丁包中的那些特性是你正在使用而必须打的。企业管理器(EM)使你能订阅一个基于特性的补丁服务,因此企业管理器可以自动扫描那些你正在使用的特性有补丁可以打。 ·

自动SQL优化

(Auto SQL Tuning)

10g的自动优化建议器可以将优化建议写在SQL profile中。而在11g中,你可以让oracle自动将能3倍于原有性能的profile应用到SQL语句上。性能比较由维护窗口中一个新管理任务来完成。

PLSQL怎么执行SQL语句

通过f5查看到的执行计划,其实是pl/sql developer工具内部执行查询 plan_table表然后格式化的结果。

select * from plan_table where statement_id=...。其中

description列描述当前的数据库操作,

object owner列表示对象所属用户,

object name表示操作的对象,

cost列表示当前操作的代价(消耗),这个列基本上就是评价sql语句的优劣,

cardinality列表示操作影响的行数,

bytes列表示字节数篇二:plsqldeveloper工具使用教程

plsql入门

pl/sql的概述

pl/sql的优势

pl/sql是一种块结构的语言,允许你将业务逻辑封装在一起,这是到目前为止使用pl/sql的最大优势

pl/sql是在服务器上运行,可以与数据库和sql引擎直接进行交互,

pl/sql是什么?

(procedural language/sql) 是oracle在标准的sql语言上的扩展,pl/sql不仅允许嵌入sql语言, 还可以定义变量和常量,允许使用条件语句和循环语句,允许使用列外处理各种错误,这样使得它的功能变得更加强大。

特性: 减少java程序的复杂性

一. 过程,函数,触发器是pl/sql编写的

二. 过程、函数、触发器是在oracle中

三. pl/sql是非常强大的数据库过程语言

四. 过程,函数可以再java程序中调用

为什么学?

a) 提高应用程序的运行性能

b) 模块化的设计思想[分页的过程,订单的过程,转账的过程]

c) 减少网络传输量(传统的方法,用sql语句传输! 现在就只需要调用存储过程) d)

PLSQL简介

PLSQL简介

1.1 PL/SQL简介

PL/SQL是ORACLE的过程化语⾔,包括⼀整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执⾏SQL语句,SQL语句中也可以使⽤PL/SQL函数。

1.2 创建PL/SQL程序块

DECLARE

BEGIN

EXCEPTION

END;

1.3 PL/SQL数据类型

名称类型说明

NUMBER数字型能存放整数值和实数值,并且可以定义精度和取值范围

BINARY_INTEGER数字型可存储带符号整数,为整数计算优化性能

DEC数字型NUMBER的⼦类型,⼩数

DOUBLE PRECISION数字型NUMBER的⼦类型,⾼精度实数

INTEGER数字型NUMBER的⼦类型,整数

INT数字型NUMBER的⼦类型,整数

NUMERIC数字型NUMBER的⼦类型,与NUMBER等价

REAL数字型NUMBER的⼦类型,与NUMBER等价

SMALLINT数字型NUMBER的⼦类型,取值范围⽐INTEGER⼩

VARCHAR2字符型存放可变长字符串,有最⼤长度

CHAR字符型定长字符串

LONG字符型变长字符串,最⼤长度可达32,767

DATE⽇期型以数据库相同的格式存放⽇期值

BOOLEAN布尔型TRUE OR FALSE

ROWIDROWID存放数据库的⾏号

例⼦:DECLARE

ORDER_NO NUMBER(3);

CUST_NAME VARCHAR2(20);

ORDER_DATE DATE;

EMP_NO INTEGER:=25;

PI CONSTANT NUMBER:=3.1416;

BEGIN

NULL;

END;

1.4 处理PL/SQL的异常

1.4.1 PL/SQL的异常

例如:DECLARE

X NUMBER;

BEGIN

X:= 'yyyy';--Error Here

EXCEPTION WHEN VALUE_ERROR THEN

DBMS_OUTPUT.PUT_LINE('EXCEPTION HANDED');

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档