ホームページ >データベース >mysql チュートリアル >Oracle 11g Release 1 (11.1) PL/SQL_理解 Record 类型
若创建 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 variable 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 PL/SQL 可以定义包含对象、集合和其他 Record(内置 Record)的 Record。但 Record 不能是对象类型的属性。 若声明一个 Record,表示数据库表的一行,则无需列出列,使用 %ROWTYPE 属性。 当表添加列后,你的代码仍然可以运行。若你想表示一个表列的一个子集,或是不同表的列,则你可以定义一个视图或声明一个游标,来选择右边的列,执行任何需要的连接,再在视图或游标上应用 %ROWTYPE。 %ROWTYPE because -- you only want some columns.-- Declaring cursor doesn't run query or affect performance. CURSOR c1 IS
SELECT department_id, department_name, location_id
FROM departments; rec1 c1%ROWTYPE;-- Use