参考文档
https://docs.oracle.com/database/121/LNPLS/type_attribute.htm#LNPLS01352
https://docs.oracle.com/database/121/LNPLS/rowtype_attribute.htm#LNPLS01342
1.语法
%TYPE
%ROWTYPE
2.%TYPE和%ROWTYPE的区别
相同点
1)%TYPE和%ROWTYPE都是继承表的字段类型和长度,不继承约束条件和默认值。参考ROWTYPE测试【示例二】
不同点
1)%TYPE只可以继承表中的某个一字段类型和长度,而%ROWTYPE可以继承表中所有的字段类型和长度。参考TYPE测试【示例一】和ROWTYPE测试【示例一】、【示例三】
2)%ROWTYPE可以继承游标中的字段类型和长度。
3)%ROWTYPE可以记录之间相互赋值。
4)表中若有不可见的列,%ROWTYPE若要调用时会受影响。
3.数据准备
create table TEST_DEPT
(
deptno NUMBER(2) not null,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
alter table TEST_DEPT add constraint PK_DEPTNO primary key (DEPTNO);
INSERT INTO TEST_DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO TEST_DEPT VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO TEST_DEPT VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO TEST_DEPT VALUES (40, 'OPERATIONS', 'BOSTON');
select * from test_dept;
DEPTNO DNAME LOC
--- --------- -----------
1 10 ACCOUNTING NEW YORK
2 20 RESEARCH DALLAS
3 30 SALES CHICAGO
4 40 OPERATIONS BOSTON
4.测试
1)TYPE测试
【示例一】
%TYPE继承表的字段类型和字段长度,但是不会继承约束条件以及初始化的值。 如test_dept表中的deptno是主键,变量depno只会继承test_dept表中的deptno字段的类型和长度NUMBER(2)。