%rowtype的几个注意点

转载 2012年03月28日 15:40:08
一、%rowtype只是指明引用的记录的类型,但不保证NOT NULL约束
  
  我们知道使用%type%rowtype可以分别指定引用的字段、记录类型,但其中有一个特别需要注意的地方:
  
  %type%rowtype都不保证NOT NULL约束。例如:
  
  DECLARE
  my_empno emp.empno%TYPE; --emp.empno should not be null
  ...
  BEGIN
  my_empno := NULL; - - this works well
  
  以上这段代码在emp表的empno字段不能为空的情况下依然是可以执行的。
  
  二、%rowtype记录的赋值
  
  用%ROWTYPE作声明的时候是不可以进行初始化赋值的,但是有两种方法可以一次性为所有字段赋值。
  
  方法一:假如两个记录类型的声明引用了同一数据表或游标,那么它们就可以相互赋值,如:
  
  DECLARE
  dept_rec1 dept%ROWTYPE;
  dept_rec2 dept%ROWTYPE;
  CURSOR c1 IS SELECT * FROM dept;
  dept_rec3 c1%ROWTYPE;
  
  BEGIN
  .. . 
  dept_rec1 := dept_rec2 --this works well
  但是,如果一个类型是引用的是数据表而另一个引用的是游标的话,那么,即使它们表现的内容相同,也是不能相互赋值的
  
  dept_rec2 := dept_rec3; - - not allowed
  
  因为此处的dept_rec2引用是表,而dept_rec3引用的是游标,所以即便它们查询的内容一样也
  
  方法二:我们可以使用SELECT或FETCH语句将取得的数据赋给记录。但在表或视图中定义的字段名称顺序要与记录中的名称顺序相同。
  
  DECLARE
  dept_rec dept%ROWTYPE;
  ...
  BEGIN
  SELECT * INTO dept_rec FROM dept WHERE deptno = 30;
  ...
  END; 
  但是,我们不能使用赋值语句来把字段列表中的值赋给记录。所以,下面的语法形式是不允许的:
  
  record_name := (value1, value2, value3, ...); -- not allowed
  
  三、使用别名
  
  从游标中取出的数据,如果游标定义中含有表达式时,我们就需要使用别名才能正确地为%ROWTYPE类型记录赋值:
  
  DECLARE
  CURSOR my_cursor IS
   SELECT sal + NVL(comm, 0) wages, ename FROM emp;
  my_rec my_cursor%ROWTYPE;
  BEGIN
  OPEN my_cursor;
  LOOP
   FETCH my_cursor
   INTO my_rec;
   EXIT WHEN my_cursor%NOTFOUND;
   IF my_rec.wages > 2000 THEN
   INSERT INTO temp VALUES (NULL, my_rec.wages, my_rec.ename);
   END IF;
  END LOOP;
  CLOSE my_cursor;
  END;
  

ORACLE中%TYPE和%ROWTYPE的使用

ORACLE中%TYPE和%ROWTYPE的使用

Oracle %ROWTYPE 用法

Oracle 中 %ROWTYPE:      %ROWTYPE:表示该类型为行数据类型,存储的时候为一行数据,一行有很多列,相当于表中的一行数据,也可以的游标中的一行数据。      用到%...

%rowtype的几个注意点 .

一、%rowtype只是指明引用的记录的类型,但不保证NOT NULL约束 我们知道使用%type和%rowtype可以分别指定引用的字段、记录类型,但其中有一个特别需要注意的地方: %t...
  • zzy7075
  • zzy7075
  • 2014年09月09日 15:06
  • 902

[Oracle]高效的PL/SQL程序设计(六)--%ROWTYPE的使用

  在PL/SQL程序中, 我们会遇到需要先从一个结果集中取出若干记录, 然后对每一条记录进行处理的情况, 最理想的做法是在一条SQL语句中完成, 但有时候因为需求的关系所以不一定能实现, 所以我们通...

%TYPE和%ROWTYPE的区别

%TYPE和%ROWTYPE都用来定义变量类型。 %TYPE利用已经存在的数据类型来定义新的数据类型 。最常见的就是把表中西段类型 作为变量或者常量的数据类型。 比如 DECLARE...
  • c_w_d
  • c_w_d
  • 2016年10月28日 17:27
  • 423

游标的for循环

原文链接:http://www.cnblogs.com/fjfzhkb/archive/2007/09/12/891031.html (1)FOR循环游标 (常用的一种游标)  --定义游...

%rowtype的几个注意点

 一、%rowtype只是指明引用的记录的类型,但不保证NOT NULL约束我们知道使用%type和%rowtype可以分别指定引用的字段、记录类型,但其中有一个特别需要注意的地方:%type和%ro...

PL/SQL中使用%TYPE和%ROWTYPE的区别

%TYPE:          定义一个变量,其数据类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型 相同,这时可以使用%TYPE。         使用%TYPE 特...

C 语言编程的几个注意点

  • 2007年10月01日 09:00
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:%rowtype的几个注意点
举报原因:
原因补充:

(最多只允许输入30个字)