PLSQL记录与ROWTYPE类型

简介:

PLSQL记录类似语言中的结构struct,方便于处理单行多列数据,PLSQL记录是由一组相关的记录成员Field组成,记录就像是一个镜像,使用的话基本上就两种类型:

一、自定义的也就是自定义Field及类型,这种一般满足于单行多列不是全部的列 这种可以定义的记录类型可以在复合记录类型中使用,

TYPE EMP_RECORD_TYPE1 IS RECORD(自定义的Field

V_NAME VARCHAR2(20),

V_SAL NUMBER(6,3)

);

EMP_RECORD1 EMP_RECORD_TYPE1;


TYPE EMP_RECORD_TYPE2 IS RECORD(用原表的Field 这种在复合数据类型中不可

V_NAME EMP.ENAME%TYPE,

V_SAL EMP.SAL%TYPE

);

EMP_RECORD2 EMP_RECORD_TYPE2;

自定义的一般用在不是全表的列的时候

DECLARE

TYPE EMP_RECORD_TYPE2 IS RECORD(用原表的Field

V_NAME EMP.ENAME%TYPE,

V_SAL EMP.SAL%TYPE

);

EMP_RECORD EMP_RECORD_TYPE2;

BEGIN

SELECT ENAME,SAL INTO EMP_RECORD FROM EMP;

DBMS_OUTPUT.PUT_LINE(EMP_RECORD.V_NAME);

END;

二、通过%ROWTYPE属性可以基于表或者试图定义记录变量,此定义的记录变量,成员名与类型均与原表一模一样,如果只是单纯的处理某几列,那么应该使用自定义的记录类型和变量。

IDENTIFIER TABLE_NAME%rowtype;

IDENTIFIER VIEW_NAME%rowtype;

dept_record dept%ROWTYPE;

emp_record emp%ROWTYPE;



declare

type emp_cursor is select * from emp;

emp_record emp_cursor%ROWTYPE;

begin

open emp_cursor ;

loop

fetch emp_cursor into emp_record;

exit when emp_cursor%NOTFOUND;

dbms_output.put_line(emp_record.ename||emp_record.sal);

end loop;

close emp_cursor;

end;


三、如何将记录类型转换为对象类型

要知道PLSQL对象类型是需要创建的 as database object type;

create or replace type recordName_record as object 

( column varchar2,

cloumu2 varchar2)

还可以做为object body使用

create or replace type body indiv_record as

constructor function indiv_record

( column varchar2,

column varchar2)

return self as result is 

begin

self.column :=indiv_record.column;...

...

return;

----------------------------

define a variable of the record type;

recordNmaeobject recordName_record;

construct an intsance of the object type,

nameObject :=indiv_record(4);

以上就是定义了一个对象类型recordName_record 与 indiv_record对象定义了一个主体函数




本文转自 aklaus 51CTO博客,原文链接:http://blog.51cto.com/aklaus/1953390




相关文章
|
5月前
PLSQL-基本语法与记录类型
PLSQL-基本语法与记录类型
41 0
|
2月前
|
Oracle 关系型数据库 数据库
Flink Sink to Oracle 存在字段CLOB类型,如何处理错误”ORA-01461: 仅能绑定要插入LONG的LONG值“
做Flink CDC同步数据过程中,目标是Oracle数据库,其中某个字段较大被设置为CLOB类型,其中会遇到异常,”ORA-01461: 仅能绑定要插入LONG的LONG值“
|
8月前
|
Oracle 关系型数据库
Oracle 根据某个字段获取第一条数据
Oracle 根据某个字段获取第一条数据
Zp
|
SQL
在写左关联时SQL语句出现 Duplicate column name 'NAME'名字重复错误解决方法
在写左关联时SQL语句出现 Duplicate column name 'NAME'名字重复错误解决方法
Zp
356 0
|
SQL Oracle 关系型数据库
oracle中使用sql查询时字段为空 赋值默认值 ( 通过 nvl( )函数 )
oracle中使用sql查询时字段为空 赋值默认值 ( 通过 nvl( )函数 )
462 0
oracle中使用sql查询时字段为空 赋值默认值 ( 通过 nvl( )函数 )
|
存储 SQL 程序员
【Sql Server】 使用游标循环记录更新字段值
使用游标循环记录更新字段值
326 0
【Sql Server】 使用游标循环记录更新字段值
|
SQL Oracle 关系型数据库
Oracle 数据库sql语句修改表字段的字段类型和长度
Oracle 数据库sql语句修改表字段的字段类型和长度
361 0
Oracle 数据库sql语句修改表字段的字段类型和长度
|
SQL 监控 Go
SQL Server中如何识别、查找未使用的索引(unused indexes)
原文:SQL Server中如何识别、查找未使用的索引(unused indexes)   在SQL Server中,索引是优化SQL性能的一大法宝。但是由于各种原因,索引会被当做“银弹”滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根据所谓的"感觉"或“经验”先增加一些索引,而不管这些索引是否未被使用或是否合理。
1211 0
|
SQL 数据库
简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录
原文:简单实用SQL脚本Part:查找SQL Server 自增ID值不连续记录        在很多的时候,我们会在数据库的表中设置一个字段:ID,这个ID是一个IDENTITY,也就是说这是一个自增ID。
1676 0