PLSQL Language Reference-PL/SQL语言基础-词汇单元-声明

声明

声明为指定类型的值分配存储空间,并命名该存储空间,这样才能引用它。

必须在引用对象之前声明它。

声明可以出现在块、子程序和包的声明部分。

变量声明

变量的声明需要指定变量的名称和数据类型。对于大多数的数据类型,变量声明也可以指定初始值。

变量名必须是有效的用户定义的标识符。

数据类型可以是任何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_nameNOT NULL约束,但不会继承

    surname  employees.last_name%TYPE;

BEGIN

    --不会继承被值

    DBMS_OUTPUT.PUT_LINE('surname=' || surname);

END;



 

DECLARE

    name     VARCHAR(25) NOT NULL := 'Smith';

    --继承了nameNOT 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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值