PLSQL

  • 一、PL/SQL 程序设计简介
  • 二、PL/SQL 块结构和组成元素
    • PL/SQL 块
      • PL/SQL 块的结构如下:
      • PL/SQL 块可以分为三类:
    • PL/SQL 结构
    • 标识符
    • PL/SQL 变量类型
      • 变量类型
      • 复合类型
    • 记录类型
    • %ROWTYPE
    • 运算符和表达式(数据定义)
      • 关系运算符
      • 一般运算符
      • 逻辑运算符
    • 变量赋值
      • 字符及数字运算特点
      • BOOLEAN 赋值
      • 数据库赋值
    • 可转换的类型赋值
      • CHAR 转换为 NUMBER:
      • NUMBER 转换为 CHAR:
      • 字符转换为日期:
      • 日期转换为字符
    • 变量作用范围及可见性
    • 注释

一、PL/SQL 程序设计简介

PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。

二、PL/SQL 块结构和组成元素

PL/SQL 块

PL/SQL 程序由三个块组成,即声明部分、执行部分、异常处理部分

PL/SQL 块的结构如下:
DECLARE
/* 声明部分: 在此声明 PL/SQL 用到的变量,类型及游标,以及局部的存储过程和函数 */
BEGIN
/*  执行部分:   过程及 SQL 语句 , 即程序的主要部分 */
EXCEPTION
/* 执行异常部分: 错误处理 */
END;
--其中 执行部分是必须的。
PL/SQL 块可以分为三类:
  • 无名块:动态构造,只能执行一次
  • 子程序:存储在数据库中的**存储过程函数**及包等。当在数据库上建立好后可以在其它程序中调用它们
  • 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序

PL/SQL 结构

  • PL/SQL 块中可以包含子块
  • 子块可以位于 PL/SQL 中的任何部分
  • 子块也即 PL/SQL 中的一条命令

标识符

PL/SQL 程序设计中的标识符定义与 SQL 的标识符定义的要求相同。要求和限制有:

  • 标识符名不能超过 30 字符
  • 第一个字符必须为字母
  • 不分大小写
  • 不能用’-‘(减号);
  • 不能是 SQL 保留字。

提示 :一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果

--例如:下面的例子将会删除所有的纪录,而不是KING 的记录;DECLAREEname varchar2(20) := ’KING’; BEGINDELETE FROM emp WHERE ename=ename;END;

变量命名在 PL/SQL 中有特别的讲究,建议在系统的设计阶段就要求所有编程人员共同遵守一定的要求, 使得整个系统的文档在规范上达到要求。下面是==建议的命名方法==:

标识符 命名规则 例子
程序变量 **V_**name V_name
程序常量 **C_**Name C_company_name
游标变量 Name**_cursor** Emp_cursor
异常标识 **E_**name E_too_many
表类型 Name_table_type Emp**_record_type**
Name_table Emp
记录类型 Name**_record** Emp_record
SQL*Plus 替代变量 P_name P_sal
绑定变量 G_name G_year_sal

PL/SQL 变量类型

在前面的介绍中,有系统的数据类型,也可以自定义数据类型。下表是 ORACLE 类型和 PL/SQL 中的变量类型的合法使用列表:

变量类型

在 ORACLE8i 中可以使用的变量类型有:

类型 子类 说 明 范 围 ORACLE 限制
CHAR Character String Rowid Nchar 定长字符串 民族语言字符集 0à32767 可选,确省=1 2000
VARCHAR2 Varchar, String NVARCHAR2 可变字符串 民族语言字符集 0à32767 4000 4000
BINARY_INTEG ER 带符号整数,为整数计算优 化性能
NUMBER(p,s) Dec Double 小数, NUMBER 的子类型高精度实数 整数, NUMBER 的子类型
类型 子类 说 明 范 围 ORACLE 限制
precision Integer Int Numeric Real Small int 整数, NUMBER 的子类型与NUMBER 等价 与NUMBER 等价整数, 比 integer 小
LONG 变长字符串 0->2147483647 32,767 字节
DATE 日期型 公元前 4712 年 1 月 1 日至公元后 4712 年 12 月 31 日
BOOLEAN 布尔型 TRUE, FALSE,NULL 不使用
ROWID 存放数据库行号
UROWID 通用行标识符,字符类型
复合类型

ORACLE 在 PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型—记录和表.

记录类型

记录类型是把逻辑相关的数据作为一个单元存储起来,称作 PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息

定义记录类型语法如下:

TYPE record_type IS RECORD(
Field1 type1    [NOT NULL]  [:= exp1 ],
Field2 type2    [NOT NULL]  [:= exp2 ],
. . .   . . .
Fieldn typen    [NOT NULL]  [:= expn ] ) ;


%ROWTYPE

PL/SQL 提供**%ROWTYPE 操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致**。使用%ROWTYPE 特性的优点在于:

  • 所引用的数据库中列的个数和数据类型可以不必知道
  • 所引用的数据库中列的个数和数据类型可以实时改变

运算符和表达式(数据定义)

关系运算符
运算符 意义
= 等于
<> , != , ~= , ^= 不等于
< 小于
> 大于
<= 小于或等于
>= 大于或等于
一般运算符
运算符 意义
+ 加号
- 减号
* 乘号
/ 除号
:= 赋值号
=> 关系号
范围运算符
|| 字符连接符
逻辑运算符
运算符 意义
IS NULL 是空值
BETWEEN AND 介于两者之间
IN 在一列值中间
AND 逻辑与
OR 逻辑或
NOT 取返,如 IS NOT NULL, NOT IN

变量赋值

在 PL/SQL 编程中,变量赋值是一个值得注意的地方,它的语法如下:

*:=====*

variable   := expression ;

variable 是一个PL/SQL 变量, expression 是一个 PL/SQL 表达式.

字符及数字运算特点

空值加数字仍是空值:NULL + < 数字> = NULL

空值加(连接)字符,结果为字符:NULL || <字符串> = < 字符串>

BOOLEAN 赋值

布尔值只有 TRUE, FALSE 及 NULL 三个值

数据库赋值

数据库赋值是通过 SELECT语句来完成的,每次执行 SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应

DECLARE
emp_id  emp.empno%TYPE :=7788; emp_name emp.ename%TYPE;
wages   emp.sal%TYPE;BEGIN
SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages FROM emp WHERE empno = emp_id;
DBMS_OUTPUT.PUT_LINE(emp_name||’    ‘||to_char(wages));
END;

提示:不能将SELECT语句中的列赋值给布尔变量

可转换的类型赋值

CHAR 转换为 NUMBER:

使用 TO_NUMBER 函数来完成字符到数字的转换,如:

v_total := TO_NUMBER(‘100.0’) + sal;

NUMBER 转换为 CHAR:

使用 TO_CHAR 函数可以实现数字到字符的转换,如:

v_comm := TO_CHAR(‘123.45’) || ’元’ ;

字符转换为日期:

使用 TO_DATE 函数可以实现 字符到日期的转换,如:

v_date := TO_DATE(‘2001.07.03’,‘yyyy.mm.dd’);

日期转换为字符

使用 TO_CHAR 函数可以实现日期到字符的转换,如:

v_to_day := TO_CHAR(SYSDATE, ‘yyyy.mm.dd hh24:mi:ss’) ;

变量作用范围及可见性

在 PL/SQL 编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用范围所致。与其它高级语言类似,PL/SQL 的变量作用范围特点是:

  • l 变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束。
  • l 一个变量(标识)只能在你所引用的块内是可见的。
  • l 当一个变量超出了作用范围,PL/SQL 引擎就释放用来存放该变量的空间(因为它可能不用了)。
  • l 在子块中重新定义该变量后,它的作用仅在该块内。

注释

在PL/SQL里,可以使用两种符号来写注释,即:

  • 使用双 ‘-‘ ( 减号) 加注释

    --PL/SQL允许用 – 来写注释,它的作用范围是只能在一行有效。如:
    V_Sal   NUMBER(12,2); -- 工资变量。
    
  • 使用 ==/ /== 来加一行或多行注释

    /***********************************************/
    /*  文件名: department_salary.sql   */
    /***********************************************/

    提示:被解释存放在数据库中的 PL/SQL 程序,一般系统自动将程序头部的注释去掉。只有在 PROCEDURE之后的注释才被保留;另外程序中的空行也自动被去掉。

一、PL/SQL 块结构和组成元素相关推荐

  1. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之 ...

  2. ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  3. [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

    [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORAC ...

  4. PL/SQL块结构和组成元素

    本篇主要内容如下: 2.1   PL/SQL块 2.2   PL/SQL结构 2.3   标识符 2.4   PL/SQL 变量类型 2.4.1  变量类型 2.4.2  复合类型 2.4.2.1 记 ...

  5. ORACLE PL/SQL编程之二:PL/SQL块结构和组成元素

    2.1 PL/SQL块 PL/SQL程序由三个块组成,即声明部分.执行部分.异常处理部分. PL/SQL块的结构如下: DECLARE --声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及 ...

  6. ORACLE PL/SQL编程--PL/SQL块结构和组成元素

      本篇主要内容如下: 2.1   PL/SQL块 2.2   PL/SQL结构 2.3   标识符 2.4   PL/SQL 变量类型 2.4.1  变量类型 2.4.2  复合类型 2.4.2.1 ...

  7. PL/SQL之块结构和组成元素

    PL/SQL之基础 一 SQL与PL/SQL 1 PL/SQL概念 PL/SQL 是一种高级数据库程序设计语言,该语言 专门用于在各种环境下对 ORACLE 数据库进行访问 .由于该语言 集成于数据库 ...

  8. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)...

    [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天才在于积累!) --通过知识共享树立个人品牌.   继上七篇:            [推荐]ORACLE P ...

  9. ORACLE PL/SQL编程

    PL/SQL程序设计 什么是PL/SQL PL/SQL是 Procedure Language & Structured Query Language 的缩写.PL/SQL是对SQL语言存储过 ...

最新文章

  1. 两个单体内置对象_Global和Math
  2. react-native开发经验
  3. TensorFlow 实例一:线性回归模型
  4. 中油即时通信电脑版_市场营销之即时通讯营销
  5. python直角三角形型编程_python打印直角三角形与等腰三角形实例代码
  6. numpy.tile作用,语法,参数分析以及举例
  7. 做柜员还是程序员_应届生放弃互联网大厂回家乡银行:程序员五万比不上柜员五千...
  8. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌2.77%
  9. Go发起Http请求及获取相关参数
  10. MySQL学习(五、数据操作语言DML和事务处理语言TCL)
  11. jquery radio设置选中_前端jQuery实战之 attr() 和 prop() 的区别
  12. mysql sql联合查询语句_MySQL多表联合查询sql语句
  13. 各种手持式条形码扫描仪的优缺点
  14. Tomcat 中文乱码
  15. 错位排列递推公式推导
  16. 选择比努力重要,与谁同行比要去的远方重要
  17. 幻灯片相册制作PhotoStage
  18. 矩阵理论——内积空间
  19. 桌前检查、代码评审、走查
  20. 安焦删除贴 牛人纷纷出现(1)

热门文章

  1. 【缺陷检测】基于计算机视觉实现芯片缺陷检测附matlab代码
  2. 史上最简单的入门Django教程!
  3. android 画布叠加,Android自定义图形,图形的拼接、叠加、相容
  4. 如何使用nload实时监控网络带宽
  5. 创建用户(adduser和useradd)和删除用户(userdel)
  6. 华三交换机的用户权限设置
  7. JVM——垃圾收集器
  8. dell 笔记本 ubuntu 安装 无线网卡驱动(Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter)
  9. openmm源码配置
  10. 《 SpringBoot经典学习笔记》读书笔记