PL/sql语法单元

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;

时间: 2024-11-16 05:21:04

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

PL/SQL语法简介(匿名PL/SQL块)

PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/SQL是结构化的和过程化的结合体,而且最为重要的是,在用户执行多条SQL语句时,每条SQL语句都是逐一的发送给数据库,而PL/SQL可以一次性将多条SQL语句一起发送给数据库,减少网络流量 SQL执行 PL/SQL执行 匿名Pl/SQL块 – 动态构造,只能执行一次 一次性完成,没有名字 存储过程,

PL/SQL语法

1.分支结构 PL/SQL中,使用if关键字作为分之结构的程序起始段. 总体有以下几种分支结构: 1)if condition then statement end if; 2)if condition then statement else then statement end if; 3)if condition then statement elsif condition then statement ... else then statement end if; 分别对应于其它语言中的i

oracle PL/SQL语法基础

目录 数据类型 定义变量 PL/SQL控制结构 参考资料 Oracle10g数据类型总结 PL/SQL之基础篇 数据类型 学习总结 字符类型 char.nchar.varchar.nvarchar:有n的以字符存储无n的以字节存储,有var是可变的,存储空间以实际大小存储,无var的是固定大小,从空格补齐. 数字类型 NUMBER(p[,s]):定点数,s为小数位数 BINARY_FLOAT:32位单精度浮点数类型 BINARY_DOUBLE:64位双精度浮点数类型. 时间类型 date 定义变

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

一:PL/SQL程序块 PL/SQL是一种块结构的语言,一个PL/SQL程序就是一个 代码逻辑块. PL/SQL程序由三部分构成: 1 声明 部分 使用关键字DECLARE开头,它是一个可选的部分,用于声明与赋初值在该程序中使用的  所有变量,游标,子程序,和其他元素. 2 可执行命令 部分 使用关键字BEGIN和END包裹,必须有.定义了一系列 PL/SQL语句  . 3 异常处理 部分 使用关键字EXCEPTION,可选,用于处理可执行命令部分捕获的异常. 二:基本格式 DECLARE <d

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

本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQL程序设计终极指南>志在打造PL/SQL领域最为系统.全面.实战.权威的著作,通过一系列非常突出的优势在大量的同类书中脱颖而出,成为该领域的标准读物. PL/SQL本身涉及的知识点浩瀚.庞杂,初学者根本无法依靠自身能力理清头绪,学习成本极高.本书对知识点进行了体系化的梳理,化繁杂为有序,突出重点,直指核

Oracle PL SQL专家指南 高级PL/SQL解决方安案的设计与开发

下载地址:网盘下载 内容介绍 编辑 本书所包含的大量信息可将您的编程技术提高到一个新的水平.您将学习编写动态PL/SQL程序和Oracle数据库接口.执行复杂计算,以及使用高级技术控制错误条件的方法.另外,还将获得关于PL/SQLToolkit,Java集成以及性能优化方面的最新资料.Oracle专业人员RonHardman和Michael McLaughlin在本书中包含了所有数据信息,提供了真实的案例.大量的技巧.语法实例,以及每个主题独特的解决方案. 本书主要内容: ●使用程序.函数.程序

Oracle PL/SQL语句基础学习笔记(上)

PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE server和其它工具中了,近几年中很多其它的开发者和DBA開始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及怎样设计并运行一个PL/SQL程序. 1.PL/SQL的长处 从版本号6開始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的长处以及其独有的数据管理的便利性,那么你非常难想象ORACLE缺了PL/SQL的情形.PL/SQL 不是一个独立的产品,他

PL/SQL简单入门教程

PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形.PL/SQL 不是一个独立的产品,他是一个整合到OR

Oracle——PL/SQL

什么是PL/SQL PL/SQL是一种过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断.循环等操作实现复杂的功能或者计算的程序语言. PL/SQL语法 1)hello,world --打印Hello World declare --说明部分 begin --程序部分 dbms_output.