RECORD类型
在PL/SQL块中定义的记录类型是局部类型,只有在块内部有效。仅当这个块是个独立的存储或包子程序时,才被存储在数据库中。
在包规范中定义的记录类型是一个公有成员,可以在包外面通过包名修饰符来引用它,包名.类型名。它一直存储在数据库中,直到使用drop package语句删除了包。
不能在方案层次创建记录类型,因此记录类型不可能是ADT数据类型。
记录类型中的域,可以指定非空约束,如果指定非空约束则必须要指定一个非空的初始值。
DECLARE TYPE DeptRecTyp IS RECORD ( --指定非空约束和非空的默认初始值。 dept_id NUMBER(4) NOT NULL := 10, dept_name VARCHAR2(30) NOT NULL := 'Administration', mgr_id NUMBER(6) := 200, loc_id NUMBER(4) := 1700 );
dept_rec DeptRecTyp; BEGIN DBMS_OUTPUT.PUT_LINE('dept_id: ' || dept_rec.dept_id); DBMS_OUTPUT.PUT_LINE('dept_name: ' || dept_rec.dept_name); DBMS_OUTPUT.PUT_LINE('mgr_id: ' || dept_rec.mgr_id); DBMS_OUTPUT.PUT_LINE('loc_id: ' || dept_rec.loc_id); END;
|
DECLARE TYPE name_rec IS RECORD ( first employees.first_name%TYPE, last employees.last_name%TYPE );
TYPE contact IS RECORD ( name name_rec, -- 记录类型 phone employees.phone_number%TYPE );
friend contact; BEGIN friend.name.first := 'John'; friend.name.last := 'Smith'; friend.phone := '1-650-555-1234';
DBMS_OUTPUT.PUT_LINE ( friend.name.first || ' ' || friend.name.last || ', ' || friend.phone ); END;
|
DECLARE TYPE full_name IS VARRAY(2) OF VARCHAR2(20);
TYPE contact IS RECORD ( name full_name := full_name('John', 'Smith'), --可变数组为记录的一个域 phone employees.phone_number%TYPE );
friend contact; BEGIN friend.phone := '1-650-555-1234';
DBMS_OUTPUT.PUT_LINE ( friend.name(1) || ' ' || friend.name(2) || ', ' || friend.phone ); END;
|
-- 不同层次上定义的同名的记录类型互不兼容 CREATE OR REPLACE PACKAGE pkg AS -- 包中定义的记录类型 TYPE rec_type IS RECORD ( f1 INTEGER, f2 VARCHAR2(4) ); PROCEDURE print_rec_type (rec rec_type); END pkg;
CREATE OR REPLACE PACKAGE BODY pkg AS PROCEDURE print_rec_type (rec rec_type) IS BEGIN DBMS_OUTPUT.PUT_LINE(rec.f1); DBMS_OUTPUT.PUT_LINE(rec.f2); END; END pkg;
DECLARE TYPE rec_type IS RECORD ( -- 局部记录类型 f1 INTEGER, f2 VARCHAR2(4) ); r1 pkg.rec_type; -- 包中定义的记录类型 r2 rec_type; -- 局部记录类型
BEGIN r1.f1 := 10; r1.f2 := 'abcd'; r2.f1 := 25; r2.f2 := 'wxyz';
pkg.print_rec_type(r1); -- 成功 --pkg.print_rec_type(r2); -- 失败 END;
|
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1118604/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1118604/