PLSQL Language Referenc-PL/SQL集合和记录-给记录变量赋值

给记录变量赋值

对于任何记录变量,可以为每个域单独赋值;在有些情况下可以将一个记录变量的值赋给另一个记录变量;如果一个记录变量表示表或视图的整行或行的一部分,可以将被表示的行赋值给记录变量。

将一个记录变量赋值给另一个

只有下面的情况可以进行整体赋值:

2个变量具有相同的记录类型

目标变量是使用记录类型声明的,源变量是使用%ROWTYPE声明的(从光标来声明),它们的域在数量的顺序上相同,且对应域具有相同的数据类型。


--具有相同的记录类型

DECLARE

    TYPE name_rec IS RECORD (

        first  employees.first_name%TYPE DEFAULT 'John',

        last   employees.last_name%TYPE DEFAULT 'Doe'

    );

 

    name1 name_rec;

    name2 name_rec;

 

BEGIN

    name1.first := 'Jane';

    name1.last := 'Smith';

    DBMS_OUTPUT.PUT_LINE('name1: ' || name1.first || ' ' || name1.last);

    name2 := name1;

    DBMS_OUTPUT.PUT_LINE('name2: ' || name2.first || ' ' || name2.last);

END;

 

--将使用%ROWTYPE声明的变量赋值给使用记录类型声明的变量

DECLARE

    TYPE name_rec IS RECORD (

        first  employees.first_name%TYPE DEFAULT 'John',

        last   employees.last_name%TYPE DEFAULT 'Doe'

    );

 

    CURSOR c IS

        SELECT first_name, last_name

        FROM employees;

 

    target name_rec;

    source c%ROWTYPE;

 

BEGIN

    source.first_name := 'Jane';

    source.last_name := 'Smith';

 

    DBMS_OUTPUT.PUT_LINE ('source: ' || source.first_name || ' ' || source.last_name);

 

    target := source;

    DBMS_OUTPUT.PUT_LINE ('target: ' || target.first || ' ' || target.last);

END;

 

DECLARE

    TYPE name_rec IS RECORD (

        first  employees.first_name%TYPE,

        last   employees.last_name%TYPE

    );

 

    TYPE phone_rec IS RECORD (

        name  name_rec,                -- 嵌套记录类型

        phone employees.phone_number%TYPE

    );

 

    TYPE email_rec IS RECORD (

        name  name_rec,                -- 嵌套记录类型

        email employees.email%TYPE

    );

 

    phone_contact phone_rec;

    email_contact email_rec;

 

BEGIN

    phone_contact.name.first := 'John';

    phone_contact.name.last := 'Smith';

    phone_contact.phone := '1-650-555-1234';

 

    --直接赋值

    email_contact.name := phone_contact.name;

    email_contact.email := (

        email_contact.name.first || '.' ||

        email_contact.name.last  || '@' ||

        'example.com'

    );

 

    DBMS_OUTPUT.PUT_LINE (email_contact.email);

END;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1118607/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17013648/viewspace-1118607/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值