声明
声明为指定类型的值分配存储空间,并命名该存储空间,这样才能引用它。
必须在引用对象之前声明它。
声明可以出现在块、子程序和包的声明部分。
变量声明
变量的声明需要指定变量的名称和数据类型。对于大多数的数据类型,变量声明也可以指定初始值。
变量名必须是有效的用户定义的标识符。
数据类型可以是任何PL/SQL数据类型。PL/SQL数据类型包括SQL数据类型。
数据类型可以是scalar(标量的)(不包含内部成员的)也可以是复合的(包含内部成员的)
--声明变量 DECLARE part_number NUMBER(6); -- SQL数据类型 part_name VARCHAR2(20); -- SQL数据类型 in_stock BOOLEAN; -- PL/SQL数据类型 part_price NUMBER(6,2); -- SQL数据类型 part_description VARCHAR2(50);-- SQL数据类型 BEGIN NULL; END; |
常量声明
常量的声明相对于变量有2个附加要求:关键字CONSTANT和常量的初始值。(常量的初始值是它的永久的值)
DECLARE credit_limit CONSTANT REAL := 5000.00; -- SQL数据类型 max_days_in_year CONSTANT INTEGER := 366; -- SQL数据类型 urban_legend CONSTANT BOOLEAN := FALSE; -- PL/SQL数据类型 BEGIN NULL; END; |
变量和常量的初始值
在变量的声明中初始值是可选的,除非指定了NOT NULL约束。
在常量的声明中初始值是必须的。
如果声明是在一个块或子程序中,则每当程序执行到块或子程序时,初始值都被赋值给变量或常量;如果声明是在包规范中,则这个初始值在每个会话中被赋值一次。(无论是私有还是公有的)
进行初始赋值使用:=或DEFAULT关键字,后面跟一个表达式。表达式中可以包含前面声明的常量或已经被初始化的变量。
-- 11g12_02_11.tst DECLARE hours_worked INTEGER := 40; employee_count INTEGER := 0;
pi CONSTANT REAL := 3.14159; radius REAL := 1; area REAL := (pi * radius**2); BEGIN NULL; END; |
DECLARE counter INTEGER; -- 默认的初始值为NULL BEGIN counter := counter + 1; -- NULL + 1 仍然是NULL
IF counter IS NULL THEN DBMS_OUTPUT.PUT_LINE('counter = NULL.'); END IF; END;
|
非空约束
可以将NOT NULL约束施加于scalar变量或常量上。NOT NULL约束可以防止给它们赋NULL值。成员可以隐式地(从它的数据类型获得)或显式地获得NOT NULL约束。
DECLARE --显式指定NOT NULL约束 acct_id INTEGER(4) NOT NULL := 9999; -- 隐式地从相应的数据类型获得NOT NULL约束 a NATURALN := 9999; b POSITIVEN := 9999; c SIMPLE_INTEGER := 9999; BEGIN NULL; END; |
PL/SQL把任何长度为0的字符串看作是NULL,包括字符函数和BOOLEAN表达式的返回值。
DECLARE null_string VARCHAR2(80) := TO_CHAR(''); address VARCHAR2(80); zip_code VARCHAR2(80) := SUBSTR(address, 25, 0); name VARCHAR2(80); valid BOOLEAN := (name != ''); BEGIN IF null_string IS NULL THEN DBMS_OUTPUT.PUT_LINE('null_string = NULL'); END IF;
IF address IS NULL THEN DBMS_OUTPUT.PUT_LINE('address = NULL'); END IF;
IF zip_code IS NULL THEN DBMS_OUTPUT.PUT_LINE('zip_code = NULL'); END IF;
IF name IS NULL THEN DBMS_OUTPUT.PUT_LINE('name = NULL'); END IF;
IF valid IS NULL THEN DBMS_OUTPUT.PUT_LINE('valid = NULL'); END IF; END;
|
%type属性
可以用来声明与先前声明的变量或列具有相同数据类型的数据元素,而不需要知道具体是什么类型。
如果被引用的成员改变了,则声明的成员随之改变。
引用成员 被引用成员%TYPE; |
引用成员从被引用成员继承:
n 数据类型和大小
n 约束(除非被引用成员是列)
引用成员不继承被引用成员的初始值。因此如果引用成员被指定或继承了NOT NULL约束,就必须为它指定初始值。
该属性在声明变量保存数据库值的时候非常有用。
变量名 表名.列名%TYPE; |
DECLARE --employees.last_name有NOT NULL约束,但不会继承 surname employees.last_name%TYPE; BEGIN --不会继承被值 DBMS_OUTPUT.PUT_LINE('surname=' || surname); END; |
DECLARE name VARCHAR(25) NOT NULL := 'Smith'; --继承了name的NOT NULL约束 surname name%TYPE := 'Jones'; BEGIN DBMS_OUTPUT.PUT_LINE('name=' || name); DBMS_OUTPUT.PUT_LINE('surname=' || surname); END;
|
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1102573/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1102573/