ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Referenc-PL/SQL集合和记录-给记录变量赋值

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

原创 Oracle 作者:LuiseDalian 时间:2014-03-14 07:48:04 0 删除 编辑

给记录变量赋值

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

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

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

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

n  目标变量是使用记录类型声明的,源变量是使用%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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5677753