PL/SQL %type和%rowtype的区别

162 阅读1分钟

%type(引用型变量)

声明一个新的变量并引用另一个已经定义好的变量的数据类型(或者是表中某个列的数据类型), 新的变量的数据类型将和引用变量的数据类型一致。

当引用变量的数据类型改变时,新的变量数据类型也会随之改变。

如:

DECLARE
  name t_student.name%type;
  age  t_student.age%type;

BEGIN
  SELECT t.name,t.age INTO name,age
  FROM t_student t
  WHERE t.id = &ID;
  DBMS_OUTPUT.put_line('学生姓名:' || t.name);
  DBMS_OUTPUT.put_line('学生性别:' || t.age);
END;


即name,age的数据类型与t_student表中name,age列的数据类型一样

%rowtype (记录集型变量)

使用%ROWTYPE来定义一个表示表中一行记录的变量

声明一个新的变量,通过%rowtype引用一个表,那么这个新的变量将成为引用表中各个列的列名、数据类型都相同的行记录变量

(可以把这个新的变量想象成一个集合,通过集合名称.引用表的列名就可以实现列值的输出)

如:

DECLARE
    student t_student%ROWTYPE;
BEGIN
  SELECT * INTO student
  FROM t_student
  WHERE id=1;
  DBMS_OUTPUT.PUT_LINE('姓名:' || student.name);
  DBMS_OUTPUT.PUT_LINE('年龄:' || student.age);
END;

%type和%rowtype的区别

不同点:

  1. %type只能引用表中某一个列的数据类型
  2. %rowtype可以引用整张表的数据类型和列名

相同点:

  • 引用变量的数据类型改变时,新的变量数据类型也会随之改变。