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. 多列布局——column-width

    column-width的使用和CSS中的width属性一样,不过不同的是,column-width属性在定义元素列宽的时候,既可以单独使用,也可以和多列属性中其他属性配合使用.其基本语法如下所示 : ...

  2. 函数nvl 和decode

    decode(nvl(kkc.category, 'one'),'one','普通','two','精品','three','行业','four','白金')

  3. 关于SQL Server 中连接查询Join的几种常见用法

    现有A.B .C 三个表,A中的ID=B中的ID,B中的ID=C中的ID:也就是:A.ID=B.ID,B.ID=C.ID; 一. Inner Join 把两个表链接一起查 Select * from ...

  4. [转]Win7 64位搭建本地SVN服务器 Apache+Subversion

    转载地址:http://blog.sina.com.cn/s/blog_4f072a7001015j5z.html 一.工具下载 01.SVN 服务器Subversion:Setup-Subversi ...

  5. java转换unicode,筛选文件中的insert语句并把日期给转换为可以直接在数据库执行的语句

    package com; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; impo ...

  6. jenkins对结果进行断言问题

    TextFinder plugin插件 Jenkins在判定使用shell scripts完成build成功与否的时候,是根据shell最终的返回值是否为零来判定的:零即成功,非零即失败.这点判定事实 ...

  7. 小白菜初探nodejs

    记得大四那年实习的时候出去找工作,就常常听见大家说node.从那以后,悄然埋下了一颗学习nodejs的心.不过由于基础太薄弱,一直没有学习.加之工作上没有相关应用,就一直搁置到现在. 年会的时候,老大 ...

  8. web过滤器中获取请求的参数(content-type:multipart/form-data)

    1.前言: 1.1 在使用springMVC中,需要在过滤器中获取请求中的参数token,根据token判断请求是否合法: 1.2 通过requst.getParameter(key)方法获得参数值; ...

  9. Java安装与环境配置

    Java安装 第一步 安装jdk-8u111-windows(根据操作系统的位数选择安装32位或64位) 注:路径用英文,不要出现中文和空格等.jdk和jre放在同一个文件夹下,便于管理 本例的路径为 ...

  10. Debian 上面五分钟搭建 WordPress - 博客/网站平台

    没有废话,步骤如下: 下载安装软件,MySQL Apache PHP sudo aptitude install mysql-server mysql-client ##安装 MySQLsudo ap ...