关键字:
%tyep,%rowtype、人大金仓、KingbaseES
%type和%rowtype介绍
%type和%rowtype用于声明一个变量或者参数,其数据类型与指定的数据库表的列或其他数据库对象的列的类型相匹配。
%type是一种数据类型声明符号,用于声明变量的数据类型与指定数据库表或游标的列具有相同的数据类型。通过使用%type,可以确保变量与相关表或游标列的数据类型保持一致。例如:emp_name emp.last_name%type;表示emo_name变量与emp表中的last_name列具有相同的数据类型。
%rowtype是另一种数据类型声明符号,用于声明记录类型变量,该变量的结构与指定数据库表或游标的一行记录具有相同的结构,通过使用%rowtype,可以直接使用数据库表或游标的定义变量。例如,emp_record emp%rowtype;定义了一个emp_record变量,其结构与emp表的结构一致。
%type和%rowtype的使用
(1)%type
- 使用列属性或变量名加上%TYPE用来标识字段类型
- 用来表示一个和已有表字段具有相同类型的类型
- 除继承字段类型外,不能继承字段的其他属性
例如:不能继承在字段上定义的NOT NULL属性或者DEFAULT属性
\set SQLTERM ;
CREATE TABLE t1(id int,name varchar(50));
INSERT INTO t1 VALUES(1,'kingbase');
\set SQLTERM /
DECLARE
a1 t1.id%type;
a2 t1.name%type;
BEGIN
SELECT id,name INTO a1,a2 FROM t1;
RAISE NOTICE '%',a1;
RAISE NOTICE '%',a2;
END;
(2)%rowtype
- 一个复合类型,叫做行变量
- 用来表示和一个现有的表或者视图的行类型相同的类型
- 一个%ROWTYPE类型变量,可存放SELECT检索结果集的一条记录
CREATE TABLE t1(id int,name varchar(50));
INSERT INTO t1 VALUES(1,'kingbase');
\set SQLTERM /
DECLARE
a1 t1%rowtype;
BEGIN
SELECT id,name INTO a1 FROM t1;
RAISE NOTICE '%',a1.id;
RAISE NOTICE '%',a1.name;
END;
/
%type和%rowtype的区别
(1)%type是基于数据库表或表字段的数据类型来声明变量,而%rowtype则是基于整个表的结构来声明变量的,包含所有列及其数据结构类型。
(2)%type仅生命单个变量,而%rowtype声明的是一个记录变量,可以容纳整个表的一行数据。
(3)%type可以用于任何有效的PLSQL数据类型,而%rowtype只能用于记录类型的变量




