若创建 records,需要先定义一个 RECORD 类型,再用该类型声明变量。也可以创建或查找一个表、视图,或 PL/SQL 游标,总之是你想
本文内容
若创建 records,需要先定义一个 RECORD 类型,再用该类型声明变量。也可以创建或查找一个表、视图,或 PL/SQL 游标,总之是你想要的值,使用 %ROWTYPE 属性来创建匹配的 Record。
你可以在任何 PL/SQL 块、子程序或包的声明部分定义 RECORD 类型。当你自定义 RECORD 类型时,不能在域上指定一个 NOT NULL 的约束,或给出它们的默认值。
示例 1:演示声明和初始化一个简单的 Record 类型
DECLARE TYPE DeptRecTyp IS RECORD (deptid NUMBER(4) NOT NULL := 99,dname departments.department_name%TYPE,loc departments.location_id%TYPE,region regions%ROWTYPE ); dept_rec DeptRecTyp;BEGIN dept_rec.dname := ‘PURCHASING’;END;/
示例 2:演示声明和初始化 Record 类型
:= -1, name VARCHAR2(64) NOT NULL := ‘[anonymous]’);— Declare record variables of the types declared rec1 rec1_t; rec2 rec2_t;— Declare a record va来1源gaodai#ma#com搞*代#码1网riable that can hold— a row from the EMPLOYEES table.— The fields of the record automatically match the names and— types of the columns.— Don’t need a TYPE declaration in this case. rec3 employees%ROWTYPE;— Or mix fields that are table columns with user-defined fields. TYPE rec4_t IS RECORD (first_name employees.first_name%TYPE,last_name employees.last_name%TYPE,rating NUMBER); rec4 rec4_t;BEGIN— Read and write fields using dot notation rec1.field1 := ‘Yesterday’; rec1.field2 := 65; rec1.field3 := TRUNC(SYSDATE-1);— Didn’t fill name field, so it takes default value DBMS_OUTPUT.PUT_LINE(rec2.name);END;/
若在数据库存储一个 Record,你可以在 INSERT 或 UPDATE 语句指定,只要它的域与表的列匹配。
你可以使用 %TYPE 来指定 Record 域类型对应表的列的类型。即使列类型改变了,你的代码仍然可以运行。例如,增加了 VARCHAR2 字段的长度,或 NUMBER 字段的精度。
示例 3:演示使用 %ROWTYPE 来声明一个 Record,,来保存 department 表的信息
DECLARE— Best: use %ROWTYPE instead of specifying each column.— Use %ROWTYPE instead of