二、PL/SQL 编程基础
Oracle PL/SQL 编程基础
文章目录
- 一、PL/SQL编程基础
- 1.1 字符类型
- 1.2 词汇单元
- 1.3 PL/SQL 变量
- 1.4 使用基础数据类型
- 1.5 最常见的数据类型
- 1.6 声明和初始化变量
- 1.7 变量的作用域
一、PL/SQL编程基础
1.1 字符类型
PL/SQL 引擎支持四种类型的字符:字母、数字、符号(*、+、-、=)等和空格。当组合这些字符类型的元素时,就会创建一个词汇单元。
1.2 词汇单元
PL/SQL 词汇单元分为如下五类:
- 标识符必须以字母开头,最多包含30个字符
- 保留字是PL/SQL专用的词(如DECLARE,BEGIN,END等)
- 定界符只对PL/SQL有特殊含义的字符,如算术操作符和引号等。
- 字面值是不代表标识符的值(字符、数值或者布尔(true,false)).
- 注释可以是单行注释(–)或者多行注释(/**/)
1.3 PL/SQL 变量
语法:变量名 数据类型
命名变量的条件:变量须以字母开头,最大为30个字符长度。
如:
v_stu_id
v_last_name
变量名v_stu_id 和 V_STU_ID被认为是相同的,因为PL/SQL是不区分大小写的。
为了使用变量,须在PL/SQL语句块的声明部分中声明它。必须给变量赋予一个名称,定义其数据类型。也可以给这个变量赋一个初始值。如果没有给变量赋予初始值,则值为NULL。如果要限制变量是非空的,须给变量赋予初始值。可以把变量设置为一个常量,这意味着这个变量的值不能被修改。
1.4 使用基础数据类型
给变量设定的数据类型可以基于某种数据库对象。这称作anchored声明,因为变量的数据类型依赖于底层对象的数据类型。应该尽可能的使用anchored数据类型,以便于当基础对象的数据类型发生变化时,无需更改PL/SQ代码。
语法:变量名 type_attribute%TYPE
DECLARE
v_id NUMBER := &id;
-- anchored数据类型
--可理解为变量v_ooag001的数据类型参照表ooag_t下面的ooag001字段的数据类型
--%TYPE是固定的语法
v_ooag001 ooag_t.ooag001%TYPE;
v_ooag011 ooag_t.ooag011%TYPE;
BEGIN
SELECT ooag001,ooag011
INTO v_ooag001,v_ooag011
FROM ooag_t
WHERE ooag001 = v_id
AND ooagent = 70
AND rownum = 1;
DBMS_OUTPUT.PUT_LINE(v_ooag001||', '||v_ooag011);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('未查到数据');
END;
1.5 最常见的数据类型
VARCHAR2(maximum_length)
- 存储变长的字符数据
- 参数是必须的。指定字符数据的最大长度,最大为32767字节,参数须使用整数型的字面值。
CHAR[(maximum_length)]
- 存储定长的字符数据(不足时使用空格填充)。
- 参数是可选的,指定字符数据的最大长度,最大为32767字节。
- 参数如果没有指定最大长度,则默认为1字节.
注意长度是字节,不是字符数
NUMBER[(precision, scale)]
- 存储定点或浮点数
- precision是数字的位数
- scale决定是否进行四舍五入
- 如果scale不指定默认是0,这时数值会转换成整数
- 如果precision和scale都不指定,将尽最大的精度进行存储
- scale的数值范围可以是负数,会四舍五入到小数点的左边。如scale为-3时,3456会转换成3000
BINARY_INTEGER
- 存储有正负之分的整数变量
- 与NUMBER数据类型相比较,BINARY_INTEGER变量被存储为二进制格式,这样会占用更少空间。
- 这个数据类型主要用于索引PL/SQL表。
DATE
- 存储定长的日期值
- 日期实际上存储为二进制格式
TIMESTAMP
- 是DATE数据类型的扩展。存储定长的日期值。
BOOLEAN
- 存储TRUE、FALSE或者NULL。NULL表示丢失的,未知的或者不使用的值。
1.6 声明和初始化变量
如果把某变量声明为常量,则该变量的值会在整个语句块中都会保持不变,那么必须在声明时进行赋值。
DECLARE
v_num NUMBER(8,0);
--定义一个常最c_chr数据类型char,并赋值Y
c_chr CONSTANT CHAR := 'Y';
BEGIN
v_num := 100.5533333333333333333333333333333333333333;
DBMS_OUTPUT.PUT_LINE(v_num);
END;
1.7 变量的作用域
在声明部分所定结构体的作用范围或者生存期就是当前语句块。