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. MyBatis Generator自动生成的配置及使用

    注意:文件名不能有中文字符,不然不能自动生成 找到MyBatis Generator.rar\MyBatis Generator\eclipse里的features和plugins文件,把这两个文件复 ...

  2. Java语言中,类所拥有的“孩子”,他们的关系是怎样的

    学习了一本有关Java的书.初步了解了一些面向对象的内容. java是由一个个的类组成的,这些类组成了java程序.类之下有他的孩子,这四个孩子分别是: 成员变量:就相当于一个个的变量,他由stati ...

  3. Safari中的new Date()格式化坑

    今天在测试的时候发现,在Chrome中的如下代码: new Date("2014-03-09"); 在Safari中报错invalid date.经过查阅资料找到类似的问答: st ...

  4. web页面状态

    200 :表示请求成功,服务器已处理 201 :表示服务器端请求被创建, 202 :表示服务器端请求已经被接收,但未处理完成 400 :表示错误的请求 404:表示请求的资源未找到. 405:表示没有 ...

  5. python入门练习题2

    1,制作表格 循环提示用户输入:用户名,密码,邮箱(要求用户输入的长度超过20个字符,如果超过则只有前20个字符有效) 如果用户输入q或Q就退出程序,将用户输入的内容以表格形式显示 user_inpu ...

  6. php之XML转数组函数的方法

    <?/** * xml2array() will convert the given XML text to an array in the XML structure. * Link: htt ...

  7. androidBroadCast总结

    BoradCast广播1.接受广播 BroadCastReceiver(接收系统的广播) 1-1:电话的广播 1-1-1:拨打电话的广播 1.创建一个类,继承BoradcastReceiver 2.重 ...

  8. 【原创】js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...

  9. Just a Hook(HDU1698 线段树的简单应用)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Prob ...

  10. PetaPoco入门(二)

    1. Petapoco基本用法 1.1. 创建示例工程 首先创建一个工程文件,为了便于展示数据这里创建一个类型为:WindowsApplication的工程文件.命名为:PetapocoTest. 程 ...