Oracle数据库--实用操作(3) PL/SQL

Oracle----PL/SQL

PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言

PL/SQL 是Oracle特有的,是对 SQL 的扩展。不同数据库厂商都有类似的“方言”,提供的新特性。

支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构

可用于创建存储过程、触发器和程序包,给SQL语句的执行添加程序逻辑

与Oracle 服务器和Oracle 工具紧密集成,具备可移植性、灵活性和安全性

PL/SQL 的优点

支持 SQL,在 PL/SQL 中可以使用:

–  数据操纵命令

–  事务控制命令

–  游标控制

–  SQL 函数和SQL 运算符

支持面向对象编程 (OOP)

可移植性,可运行在任何操作系统和平台上的Oralce数据库

更佳的性能,PL/SQL 经过编译执行

PL/SQL体系结构

PL/SQL[代码]块是构成 PL/SQL 程序的基本单元

将逻辑上相关的声明和语句组合在一起

PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分

PL/SQL中的复合符号

:=        赋值操作符

||         连接操作符

--        单行注释

/**/      多行注释

<<>>  标签分隔符

..         范围操作符

**        求幂操作符

变量和常量

PL/SQL 块中可以使用变量和常量

1.  在声明部分声明,使用前必须先声明

2.  声明时必须指定数据类型,每行声明一个标识符

3.  在可执行部分的SQL 语句和过程语句中使用

声明变量和常量的语法:

identifier [CONSTANT] datatype[NOT NULL]  

                   [:= |DEFAULT expr];

给变量赋值有两种方法:

1使用赋值语句:=

2使用 SELECTINTO 语句

DECLARE

icode VARCHAR2(6);

p_catg VARCHAR2(20);

p_rate NUMBER;

c_rate CONSTANT NUMBER :=0.10;

BEGIN

...

icode := ‘i205‘;

SELECT p_category, itemrate* c_rate

INTO  p_catg, p_rate

FROM itemfile WHERE itemcode= icode;

...

END;

DECLARE vv number:=100;   --匿名代码块,不会保存

Begin

SELECT SAL into vv  from emp where ename=‘KING‘;                 --查出KING的工资,并赋值给vv变量

DBMS_OUTPUT.PUT_LINE(‘SAL‘||vv);   --控制台输出

end;

数据类型

数字数据类型

字符数据类型

字符数据类型包括:

1.  CHAR

2.  VARCHAR2

3.  LONG

4.  RAW

5.  LONG RAW

日期时间类型

1.       存储日期和时间数据

2.       常用的两种日期时间类型

①  DATE

②  TIMESTAMP

布尔数据类型

1.       此类别只有一种类型,即BOOLEAN类型

2.       用于存储逻辑值(TRUE、FALSE和NULL)

3.       不能向数据库中插入BOOLEAN数据

4.       不能将列值保存到BOOLEAN变量中

5.       只能对BOOLEAN变量执行逻辑操作

LOB  数据类型

用于存储大文本、图像、视频剪辑和声音剪辑等非结构化数据。

LOB 数据类型可存储最大 4GB的数据。

LOB 类型包括:

6.       BLOB   将大型二进制对象存储在数据库中

7.       CLOB   将大型字符数据存储在数据库中

8.       NCLOB   存储大型UNICODE字符数据

9.       BFILE     将大型二进制对象存储在操作系统文件中

属性类型

用于引用数据库列的数据类型,以及表示表中一行的记录类型

属性类型有两种:

1.       %TYPE -  引用变量和数据库列的数据类型

2.       %ROWTYPE -  提供表示表中一行的记录类型

使用属性类型的优点:

1.       不需要知道被引用的表列的具体类型

2.       如果被引用对象的数据类型发生改变,PL/SQL 变量的数据类型也随之改变

逻辑比较

逻辑比较用于比较变量和常量的值,这些表达式称为布尔表达式

布尔表达式由关系运算符与变量或常量组成

控制结构

PL/SQL 支持的流程控制结构:

•  条件控制

–  IF 语句

–  CASE 语句

•  循环控制

–  LOOP 循环

–  WHILE 循环

–  FOR 循环

•  顺序控制

–  GOTO 语句

–  NULL 语句

•  循环控制用于重复执行一系列语句

•  循环控制语句包括:

–  LOOP、EXIT 和EXIT WHEN

•  循环控制的三种类型:

–  LOOP   -   无条件循环

–  WHILE  -  根据条件循环

–  FOR  -  循环固定的次数

loop...exit...when...endloop循环控制

采用loop...exit...when...end loop循环控制的语法结构如下所示:

loop

循环体;

exitwhen循环条件;

end loop

while...loop...end loop循环控制

这种循环控制的语法如下:

while 条件

loop

执行语句段;

end loop;

例:

Declare counter number:=0;

Begin

loop     --[无条件]循环

exit when counter>10;

DBMS_OUTPUT.PUT_LINE(‘lplpl‘||counter);

counter:=counter+1;

end loop;

end;

……………………………………………………

Declare counter number:=0;

Begin

while counter<9 loop    --先判断,再执行循环

DBMS_OUTPUT.PUT_LINE(‘lplpl‘||counter);

counter:=counter+1;

endloop;

end;

…………………………………………………………..

Declare i number:=0;

Begin

forx in 1..9 loop  --for循环:x在1-9则循环

DBMS_OUTPUT.PUT_LINE(‘lplpl‘||x);

endloop;

end;

CASE 语句用于根据单个变量或表达式与多个值进行比较

执行 CASE 语句前,先计算选择器的值

BEGIN

   CASE ‘&grade’

     WHEN ’A’ THEN DBMS_OUTPUT.PUT_LINE(’优异’);

     WHEN ’B’ THEN DBMS_OUTPUT.PUT_LINE (优秀’);

     WHEN ’C’ THEN DBMS_OUTPUT.PUT_LINE (’良好’);

     WHEN ’D’ THEN DBMS_OUTPUT.PUT_LINE (’一般’);

     WHEN ’F’ THEN DBMS_OUTPUT.PUT_LINE (’较差’);

     ELSE DBMS_OUTPUT.PUT_LINE (’没有此成绩’);

   END CASE;

END;

错误处理

•  在运行程序时出现的错误叫做异常

•  发生异常后,语句将停止执行,控制权转移到 PL/SQL 块的异常处理部分

•  异常有两种类型:

–      预定义异常 -  当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发

–      用户定义异常  -  用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发

处理预定义异常

access_into_null 在未初化对象时出现

case_not_found 在CASE语句中的选项与用户输入的数据不匹配时出现

collection_is_null 在给尚未初始化的表或数组赋值时出现

cursor_already_open 在用户试图打开已经打开的游标时出现

dup_val_on_index 在用户试图将重复的值存在使用唯一索引的数据库列中时出现

invalid_cursor 在执行非法游标运算(如打开一个尚未打开的游标)时出现

invalid_number 在将字符串转换为数字时出现

login_denied 在输入的用户名或密码无效时出现

no_data_found 在表中不存在的请求的行时出现,此外,当程序引用已经删除的元素时

storage_error 在内存损坏或PL/SQL耗尽内存时出现

too_many_rows 在执行SELECTINTO语句后返回多行时出现

value_error 在产生大小限制错误时出现

zero_divide 以零作除数时出现

Others针对所有异常

处理用户定义异常

DECLARE

invalidCATEGORY EXCEPTION;

category VARCHAR2(10);

BEGIN

category := ‘&Category‘;

IFcategory NOT IN (‘附件‘,‘顶盖‘,‘备件‘) THEN

RAISE invalidCATEGORY;

ELSE

DBMS_OUTPUT.PUT_LINE(‘您输入的类别是‘|| category);

ENDIF;

EXCEPTION

WHEN invalidCATEGORY THEN

DBMS_OUTPUT.PUT_LINE(‘无法识别该类别‘);

END;

DECLARE

rate itemfile.itemrate%TYPE;

rate_exception EXCEPTION;

BEGIN

SELECT NVL(itemrate,0) INTO rate FROM itemfile

WHERE  itemcode = ‘i207‘;

IFrate = 0 THEN

RAISE rate_exception;

ELSE

DBMS_OUTPUT.PUT_LINE(‘项费率为:‘ || rate);

ENDIF;

EXCEPTION

WHEN rate_exception THEN

RAISE_APPLICATION_ERROR(-20001, ‘未指定项费率‘);

END;

总结:

PL/SQL 是一种可移植的高性能事务处理语言

PL/SQL 引擎驻留在 Oracle 服务器中

PL/SQL 块由声明部分、可执行部分和异常处理部分组成

PL/SQL 数据类型包括标量数据类型、LOB数据类型和属性类型

控制结构包括条件控制、循环控制和顺序控制

PL/SQL 支持动态 SQL

运行时出现的错误叫做异常

异常可以分为预定义异常和用户定义的异常

时间: 2025-01-05 04:16:53

Oracle数据库--实用操作(3) PL/SQL的相关文章

---oracle 数据库的设计,PL/SQL(loop,for,if,case,while)

1.数据库的设计(DataBase Design): 针对用户特定的需求,然后我们创建出来一个最实用而且性能高的数据库! 数据库设计的步骤: 01.需求分析 02.概念结构设计 03.逻辑结构设计 04.物理机构设计 05.数据库的实施 06.数据库的运行和维护 数据库的3大范式: 1.确保每列的原子性!每一列都是一个不可再分的数据! 2.确保每列都和主键相关! 3.确保每列都和主键有直接的关系,而不是间接依赖(传递依赖)! -----------------------------------

Oracle 中Java 对象与PL/SQL类型的映射及使用

一.Jpublisher概述 Oracle JPublisher是一个用于在Java和SQL之间转换和交换结构化对象数据的工具,它还可以访问其他的数据库资源,如PL/SQL包和Java存储 过程.它生成Java类来表示数据库实体,如SQL对象和操作.PL/SQL包和过程以及服务器端Java类.你可以通过JDBC在你的Java客户端. servlet.JavaServer Pages (jsp).Enterprise JavaBeans (EJB)和Web服务中使用这些生成的类. JPublish

Oracle 数据库常用操作语句大全

Oracle 数据库常用操作语句大全 一.Oracle数据库操作 1.根据删除的时间查询出被删除的数据 select * from szdj_work_plan AS OF TIMESTAMP TO_TIMESTAMP('2018-1-19 16:51:37', 'yyyy-mm-dd hh24:mi:ss') where subject='测试一下删除0119' 1.表中唯一的最大的值 select hibernate_sequence.nextval from dual 1.创建数据库 cr

Oracle 学习笔记 17 -- 异常处理(PL/SQL)

程序在执行过程中出现异常是正常的,在程序的编写过程中出现异常也是不可避免的.但是要有相应的异常处理的机 制,来保证程序的正常执行.PL/SQL程序执行过程中出现的错误,称为异常.一个优秀的程序都应该能够正确处理 各种出错的情况,并尽可能的从错误中恢复.PL/SQL提供了异常处理机制. 概念: 异常处理(exception)是用来处理正常执行过程中未预料的事件,程序块的异常处理定义的错误和自定义的错误, 由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会异常的终止. 有三种类型的错误

Oracle数据库实用函数

实用函数 DECODE 语法如下: DECODE(value, if1, then1, if2,then2,if3,then3, . . . else )  Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果.当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1:如果value等于if2,Decode函数结果是then2:等等.事实上,可以给出多个if/then 配对.如果value结果不等于给出的任何配对时,Decode 结果就返回els

ORACLE PATCH 版本的查询 PL/SQL

--ORACLE PATCH 版本的查询 PL/SQL SELECT DD.PATCH_NAME,        PP.CREATION_DATE,        PP.DRIVER_FILE_NAME,        LANG.LANGUAGE  FROM AD_PATCH_DRIVERS PP,        AD_APPLIED_PATCHES DD,        AD_PATCH_DRIVER_LANGS LANG WHERE PP.APPLIED_PATCH_ID = DD.APPL

oracle入门(6)——PL/SQL常用语法

[本文介绍] 本文不是”语法大全“,只是记录下作项目里自己常用的一些语法.方便查询. [语法] [输出]   (1)输出语法 DBMS_OUTPUT.PUT_LINE( ) [定义]   (1)定义变量: ...... as 变量名 类型(长度) begin ...... 例如: (2)定义变量 ,类型 依赖其他变量的类型 例如: 这样,改了name的类型,returnValue类型也跟着改变. (3)自定义类型(类似C语言的结构体)每次只能拿一条数据,不然会的报错. 例如: (4)以“表”做为

Java连接MySQL数据库和Oracle数据库并进行简单的SQL操作的一次尝试

MySQL和Oracle的JDBC的maven dependency如下: <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> </dependency> <!-- oracle --> &l

Oracle学习笔记十 使用PL/SQL

PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制结构,可用于创建存储过程.触发器和程序包,给SQL语句的执行添加程序逻辑,与 Oracle 服务器和 Oracle 工具紧密集成,具备可移植性.灵活性和安全性. PL/SQL 的优点 支持 SQL,在 PL/SQL 中可以使用: 1.数据操纵命令 2.事务控制命令 3.游标控制 4.