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。 声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。 相关文章 相关视频 全栈 170W+ 主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门 入门 80W+ 主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门 实战 120W+ 主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习%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
专题推荐
推荐阅读
-
Oracle 11g Release 1 (11.1) PL/SQL_理解 Record 类型
-
Oracle 11g Release 1 (11.1) PL/SQL_了解 Collections 和 Records
-
Oracle 11g Release 1 (11.1) PL/SQL_了解 Collections 和 Records
-
Oracle 11g Release 1 (11.1) PL/SQL_理解 Collection 类型
-
Oracle 11g Release 1 (11.1) PL/SQL_理解 Collection 类型
-
Oracle 11g Release 1 (11.1) PL/SQL Collection 方法
-
Oracle 11g Release 1 (11.1) SQL_层级查询(详)
-
Oracle 11g Release 1 (11.1) Oracle 本文索引的四种类型
-
Oracle 11g Release 1 (11.1) Oracle 本文索引的四种类型
-
Oracle 11g Release 1 (11.1) SQL_层级查询(详)
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论