1.字符集

PL/SQL的字符集包括:
  • 所有大小写字母:包括A~Z和a~z。
  • 数字:包括0~9.
  • 空白字符:包括制表符、空格和回车符
  • 其他常用英文符号

2.标识符

标识符用于定义PL/sql变量、常量、异常、游标名称、游标变量、参数、子程序名称和其他程序单元名称等。
PL/sql程序中,标识符是以字符开头的,后边可以跟字符、数字、美元符号($)、#、_,其最大长度为30个字符,并且所有字符都是有效的。
3.分隔符
分隔符是指有特殊含义的单个符号或组合符号。

 符号    说      明  符号    说        明
 +  算数加或表示为整数  -  算数减或表示为负数
 * 算数乘  /  算数除
 =  关系等  :=  赋值运算符
 < 关系小于  >  关系大于
 <=  关系小于等于  >=  关系大于等于
 !=  关系不等于(<>, ^=, ~=)  ;  语句结束符
(  括号运算符开始 )  括号运算符结束
 /*  多行注释开始  */  多行注释结束
 <<  其实标签  >>  结束标签
 % 游标属性指示符或代表任意个字符的通配符 _  代表一个字符的通配符                       
 :  主机变量指示符  .  表示从属关系符号
 '  字符串标示符  "  引证标示符
 --  单行注释符  ||  字符串连接符号
 =>  位置定位符号  **  幂运算符
4.常量值
所谓常量值是指不能作为标示符的字符型、数字型、日期型和布尔型值。
(1)字符型文字:即以单引号引起来的字符串,在字符串中的字符区分大小写。如果字符串中本身包含单引号,则用两个连续的单引号进行转义。例如:‘student''book’;
(2)数字型文字:分为整数和实数两类。可以使用科学技术法表示数字型文字。
(3)布尔型文字:指示预定义的变量的取值,包括True,False,Null三个值
(4)日期类型:表示日起值,其格式随日期类型格式不同二不同。
 
5.数据类型
PL/sql数据类型包括基本数据类型、基本类型子类型、用户自定义类型三类
  • 数字类型:Binary_Integer,Pls_Interger,number
  • 字符类型:Char,Nchar,Varchar2,Nvarchar2,varchar
  • 日期/区间类型:Date,TimeStamp,Interval
  • 行标识符:RowID,URowID
  • 布尔类型:Boolean
  • 原始类型:Raw,Long Raw
  • Lob类型:Clob,Blob,Nclob,Bfile
  • 记录类型:Record
  • 集合类型:Table

注意:

  1. varchar2,char主要是用于存储来自数据库字符集的字符,而ncahar,nvarchar2用于存储来自国家字符集的字符串。
  2. RowID表示行的物理地址,而URowID既可以是行的物理地址,也可以是表示行的逻辑地址。
  3. Blob存放二进制数据,Clob,Nclob存放文本数据,而Bfile存储指向操作系统的指针。lob类型变量可以存储4GB的数据量。
  4. 记录类型:

前面介绍的数据类型都是标量数据类型,是系统预定义的。而复合类型,如记录类型,集合类型等需要用户自己定义。

在PL/Sql中,记录类型类似于C语言中的结构体。举例:
Declare
Type t_emp Is Record(
empn0 number(4),
ename varchar2(100),
sal number(6,2)
);
v_temp t_emp;
Begin
Select empno,ename,sal Into v_temp from emp where empno=100;
DBMS.OUTPUT.PUT_LINE(v_temp .ename||v_temp .sal);
End;
相同记录类型的变量可以相互赋值;不同记录类型的变量,即使成员完全相同也不能相互赋值;
记录类型只能应用于定义该记录类型的PL/sql块中,即记录类型是局部的。
 
   5.集合类型:
集合类型也是符合类型,包括索引表类型、嵌套类型和可变数组类型。集合类型与记录类型的区别是记录类型中的成员分量可以是不同类型的,类似于结构体,而集合类型中所有的成员必须具有相同的数据类型,类似于数组。
(1)索引表类型:
语法:
TYPE index_table IS  TABLE OF element_type
INDEX  BY BINARY_INTEGER | PLS_INTEGER | VARCHAR2(N)
举例:
DECLARE
TYPE emp_table  IS TABLE OF char(10) INDEX BY BINARY_INTEGER;
v_enames   emp_table;
BEGIN
select ename into v_enames(0) from emp where empno=100;
select ename into v_enames(1) from emp where empno=200;
END;-----------------------索引表类型只能应用于定义该类型的PL/sql块中。
(2)嵌套表类型
嵌套表类型中元素索引值从1开始,没有固定上限。定义语法:
     TYPE nested_table  IS  TABLE OF element_type[NOT NULL];
(3)可变数组类型
可变数组类型中元素索引值从1开始,有固定的上限。
TYPE  varrary_name  IS VARRAY |  VARYING  ARRAY (maxinum_size)
OF   element_type [NOT NULL]
如果将可变数组类型定义与数据库的模式中,则此类型是全局的。
   6.%Type与%RowType
如果要定义一个类型与某个变量的数据类型或数据库表中某个列的数据类型一致(不知道该变量或列的数据类型)的变量,可以使用%type来实现。
如果要定义一个与数据库中某个表结构一致的记录类型的变量,可以使用%RowType来实现。
  • 变量的类型随参照的变量类型,数据库列表的类型,表结构的变化而变化
  • 如果数据库表列中有NOT NULL 约束,%type,与%rowType返回的数据类型没有此限制。
 

6.变量与常量

(1)变量与常量的定义:
variable_name  [CONSTANT]  datatype  [NOT NULL] [DEFAULT  |  :=expression];
说明:
  • 每行只能定义一个变量;
  • 如果加上一个关键字CONSTANT,则表示所定义的是一个常量 ,必须为它初始值;
  • 如果定义变量时使用了NOT NULL关键字,则必须为变量赋初始值
  • 如果变量没有赋初始值,则默认为null
  • 使用DEFAULT 或“:=”为变量初始化

(2)变量的作用域

变量的作用域是指变量的有效作用范围,从变量的生命开始,直到块结束。如果PL/sql块相互嵌套,则在内部块中声明的变量是局部的,只能在内部块中引用,而外部块中声明的变量时全局的,即可以在外部块中引用,也可以在内部块中引用。
如果内部块与外部块中定义了同名的变量,则在内部块中的引用外部块的全局变量时需要使用外部块名进行标示。
例如:
<<OUTER>>
DECLARE
  v_enname  varchar2(100);
BEGIN
v_ename :='zhangsan';
DECLARE
v_name  varchar2(100);
BEGIN
v_name='this is INNER V_NAME';
OUTER.v_name='this is OUTER v_name';
END;
END;
 
7.编译指示
编译指示是对编译程序发出的特殊指令,也称为伪指令,不会改变程序的定义。它只是向编译程序传递信息,类似于嵌入在Sql中的注释。
在PL/sql中使用Pragma关键字通知编译程序,PL/sql语句的剩余部分是一个编译指示或命令。编译指示在编译时被处理,而不会在运行时被执行,类似于C语言中的#define,有四种编译指示:
  • EXCEPTION_INIT:告诉编译程序一个特定的错误号与程序中所声明的异常标识符关联起来
  • RESTRICT_REFERENCES:告诉编译程序打包程序的纯度,对函数中可以使用的Sql语句和变量进行限制。
  • SERIALLY_REUSEABLE:告诉PL/sql运行引擎时,在数据引用之间不要保持包级数据。
  • AUTONOMOUS_TRANSCTION:告诉编译程序,改程序块为自制事务,即该事务的提交和回滚是独立运行的。

例如:

DECLARE
no_such_sequece  EXCEPTION;
PRAGMA EXCEPTION_INIT(no_such_sequece,-2289)
BEGIN
END;

PL/sql语法单元的更多相关文章

  1. 【SQL】Oracle的PL/SQL语法及其拓展数据类型总结

    PL/SQL语法 PL/SQL程序由三部分组成,声明部分.执行部分.异常处理部分. 模板: DECLARE /*变量声明*/ BEGIN /*程序主体*/ EXCEPTION /*异常处理部分*/ E ...

  2. PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)

    PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...

  3. SQL PL/SQL语法手册

    SQL  PL/SQL语法手册 目   录 第一部分  SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...

  4. PL/SQL语法

    PL/SQL语法 由于pl/sql是编译后执行的,而sql语句是未经编译的,因此pl/sql语句在执行速度上更快,同时也减少了客户机和服务器的传输. 基本结构 DECLARE 声明变量.常量.用户定义 ...

  5. oracle PL/SQL语法基础

    目录 数据类型 定义变量 PL/SQL控制结构 参考资料 Oracle10g数据类型总结 PL/SQL之基础篇 数据类型 学习总结 字符类型 char.nchar.varchar.nvarchar:有 ...

  6. oracle学习笔记(十五) PL/SQL语法结构以及使用

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言. PL/SQL 是对 SQL 的扩展. 支持多种数据类型,如大对象和 ...

  7. PL/SQL学习笔记程序单元

    一:程序单元组成 一个PL/SQL程序单元主要包括三部分: 声明与定义部分:声明变量.常量.类型等:定义过程.函数等: 执行部分:执行PL/SQL语句:调用过程.参数:处理游标等: 异常处理部分:处理 ...

  8. PL/SQL学习笔记之基本块格式与语法

    一:PL/SQL程序块 PL/SQL是一种块结构的语言,一个PL/SQL程序就是一个 代码逻辑块. PL/SQL程序由三部分构成: 1 声明 部分 使用关键字DECLARE开头,它是一个可选的部分,用 ...

  9. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

随机推荐

  1. 闭包(closure)

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解 ...

  2. Python数据

    读取文件中数据的最高分数 highest_score=0 result_f=open("results.txt") for line in result_f: (name,scor ...

  3. 夺命雷公狗-----React---2--组建

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. ScrollView和listview的冲突问题,关于宽度,和滑动

    只需要重新listview即可 package com.exmple.listscrow; import java.util.logging.LogManager; import android.co ...

  5. xcode编译错误

    1.xcode无效文件的编译错误. 问题: clang: error: no such file or directory: '/Users/admin/client/trunk/sengoku_sc ...

  6. TextView,EditText中添加不同颜色的文字

    在很多时候,在我们项目里需要用到在一个TextView中要显示不同颜色的文字 private Spanned colorText(String text) { return Html.fromHtml ...

  7. Linux之保留yum安装软件后的RPM包

    yum安装软件很方便,但是下载下来的rpm包在安装后默认会被删除掉: 如果希望保留yum安装的软件包该如何做呢? 设置方法: 将/etc/yum.conf里对应的keepcache参数改为1即可,然后 ...

  8. WordCount示例深度学习MapReduce过程(1)

    我们都安装完Hadoop之后,按照一些案例先要跑一个WourdCount程序,来测试Hadoop安装是否成功.在终端中用命令创建一个文件夹,简单的向两个文件中各写入一段话,然后运行Hadoop,Wou ...

  9. ssh 免密码登录

    1.在本机下生成公钥/私钥对. ssh-keygen -t rsa -P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车.它在/home/yaoy ...

  10. sql注入过滤的公共方法

    /// <summary> ///SQL注入过滤 /// </summary> /// <param name="InText">要过滤的字符串 ...