知识大全 Oracle复合变量之RECORD
Posted 类型
篇首语:守株待兔只能得一餐饱,主动出击方能丰衣足食。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle复合变量之RECORD相关的知识,希望对你有一定的参考价值。
Oracle复合变量之RECORD 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
CREATE OR REPLACE PROCEDURE TEST_RECORD
AS
TYPE user_record_type IS RECORD(
id users id%TYPE
login_id users login_id%TYPE
name users name%TYPE);
u_r_t user_record_type;
BEGIN
FOR recd IN (SELECT * FROM users) LOOP
SELECT id login_id name INTO u_r_t FROM users WHERE id=recd id;
dbms_output put_line( ID: ||u_r_t id || LOGIN_ID: ||u_r_t login_id|| NAME: ||u_r_t name);
END LOOP;
NULL;
END;
一 什么是记录(Record)?
由单行多列的标量构成的复合结构 可以看做是一种用户自定义数据类型 组成类似于多维数组
将一个或多个标量封装成一个对象进行操作 是一种临时复合对象类型
记录可以直接赋值 RECORD :=RECORD
记录不可以整体比较
记录不可以整体判断为空
二 %ROWTYPE和记录(Record)?
请区别%ROWTYPE和记录(Record)类型 %ROWTYPE可以说是Record的升级简化版
区别在与前者结构为表结构 后者为自定义结构 二者在使用上没有很大区别 前者方便 后者灵活 在实际中根据情况来具体决定使用
Record + PL/SQL表可以进行数据的多行多列存储
三 如何创建和使用记录?
①创建记录类型
语法
TYPE 记录名 IS RECORD
(
filed type [NOT NULL] [ =eXPr ]
filedN typen [NOT NULL] [ =exprn]
)
其中 filed 是标量的名字
②声明记录类型变量
记录类型变量名 记录类型
③填充记录
④访问记录成员
记录类型变量名 filed
记录类型变量名 filedN
注意
表字段类型修改后 还需要修改记录字段类型 有时候可能会忘记 从而出现错误
对于记录内每个字段(filed ) 可以指定也可以使用%TYPE和%ROWTYPE动态指定记录字段类型
好处是表字段发生变化 记录字段自动改变 但是 由于每次执行前 遇到%TYPR或%ROWTYPE
数据库系统都会去查看对应表字段类型 会造成一定的数据库开销 如果系统中大量使用记录类型 则对性能会有一定影响
另外如果删除了某一字段 而自定义记录中使用了该字段 也会有可能忘记删除该字段
对数据库负荷偏低的系统 性能问题一般可以不重点关注 但是对于高负荷数据库服务器
各个环节都要考虑性能问题 每处节省一点出来 性能整体就有很大提高
语法
TYPE 记录名 IS RECORD
(
filed table Filed%Type [NOT NULL] [ =eXPr ]
filed table Filed%Type [NOT NULL] [ =eXPr ]
filedn table Filed%Type [NOT NULL] [ =exprn]
);
例子 记录可以整体赋值
Declare
Type EmpType is Record(
EMPNO number( )
ENAME varchar ( )
JOB varchar ( )
SAL number( )
DEPTNO number( )
);
EmpRec EmpType;
EmpRec EmpType;
Begin
EmpRec Empno:= ;
EmpRec Ename:= SMITH ;
EmpRec Job:= CLERK ;
EmpRec Sal:= ;
EmpRec Deptno:= ;
EmpRec := EmpRec ;
DBMS_output put_line(EmpRec empno);
End;
例子 记录不可以整体比较 只可以比较记录字段
Declare
Type EmpType is Record(
EMPNO number( )
ENAME varchar ( )
JOB varchar ( )
SAL number( )
DEPTNO number( )
);
EmpRec EmpType;
EmpRec EmpType;
Begin
EmpRec Empno:= ;
EmpRec Ename:= SMITH ;
EmpRec Job:= CLERK ;
EmpRec Sal:= ;
EmpRec Deptno:= ;
if EmpRec sal < EmpRec sal then
DBMS_output put_line( Xiao Xiao Xiao );
end if;
End;
例子 记录不可以整体判断为空 只可以判断记录字段
Declare
Type EmpType is Record(
EMPNO number( )
ENAME varchar ( )
JOB varchar ( )
SAL number( )
DEPTNO number( )
);
EmpRec EmpType;
Begin
if EmpRec ename is null then
DBMS_output put_line( Kong Kong Kong );
end if;
End;
例子 使用%TYPE和%ROWTYPE动态指定记录字段
DECLARE
Type MyRecType Is Record
(
RENO EMPA EMPNO%Type
RENAME EMPA ENAME%Type
RJOB EMPA JOB%Type
);
EmpRec MyRecType;
Begin
Select EMPNO ENAME JOB InTo EmpRec From empa Where empa EMPNO = ;
If EmpRec RJOB = CLERK Then
DBMS_OUTPUT PUT_LINE( Name: ||EmpRec RENAME);
End If;
End;
例子 数据集中的记录和记录类型中的数据关系
DECLARE
Type MyRecType Is Record
(
RENO EMPA EMPNO%Type
RENAME EMPA ENAME%Type
RJOB EMPA JOB%Type
);
EmpRec MyRecType;
vJob EMPA JOB%Type;
Begin
Select EMPNO ENAME JOB InTo EmpRec From empa Where empa EMPNO = ;
DBMS_OUTPUT PUT_LINE( MyRecType RJOB: ||EmpRec RJOB);
EmpRec RJOB := 修改值后 ;
DBMS_OUTPUT PUT_LINE( MyRecType RJOB: ||EmpRec RJOB);
Select JOB InTo vJob from empa Where empa EMPNO = EmpRec RENO;
DBMS_OUTPUT PUT_LINE( EMPA JOB: ||vJob);
End;
/
四 使用记录向表中插入数据?
根据表结构合理安排记录字段 比如主外键
如果用记录(RECORD)插入数据 那么只能使用记录成员
如果用%ROWTYPE插入数据 可以直接使用%ROWTYPE
例子 使用记录成员向表中插入数据
DECLARE
Type MyRecType Is Record
(
RENO EMPA EMPNO%Type
RENAME VARCHAR ( )
RJOB EMPA JOB%Type
);
EmpRec MyRecType;
Begin
Select EMPNO ENAME JOB InTo EmpRec From empa Where empa EMPNO = ;
DBMS_OUTPUT PUT_LINE(EmpRec RENO|| ||EmpRec RENAME|| ||EmpRec RJOB);
EmpRec RENO := ;
EmpRec RENAME := 杰克 ;
EmpRec RJOB := 办事员 ;
Insert InTo empa(EMPNO ENAME JOB) Values(EmpRec RENO EmpRec RENAME EmpRec RJOB);
Select EMPNO ENAME JOB InTo EmpRec From empa Where empa EMPNO = ;
DBMS_OUTPUT PUT_LINE(EmpRec RENO|| ||EmpRec RENAME|| ||EmpRec RJOB);
End;
五 使用记录更新数据?
如果用记录(RECORD)更新数据 那么只能使用记录成员
如果用%ROWTYPE更新数据 可以直接使用%ROWTYPE
例子 使用%ROWTYPE向表中插入数据
DECLARE
vEmp empa%RowType;
Begin
Select * InTo vEmp From empa Where empa EMPNO = ;
UpDate empa Set ROW = vEmp Where EMPNO = ;
End;
六 使用记录删除数据?
cha138/Article/program/Oracle/201311/17783相关参考
oracle--SQL变量 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! TransactSQL
C中设置oracle环境变量 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Re:用PRO*C写
#!/bin/bash #centosoracleg前期安装环境检查脚本 #将所需要安装的包(rpm格式)与脚本放在一个目录下 ss=$PWD cd$ss rpmivh*rpm #OR
在Oracle9iisqlplus中使用替换变量 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
利用替换变量提高Oracle数据库系统的交互性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数
知识大全 oracle中怎样从sql*plus向shell传递变量
很多人在实际的工作和学习中都遇到了无法通过sqlplus向shell传递变量下面我们来介绍一个实例脚本来进行折中处理 > 下面我们再来介绍另一个实例方法 >>>cha138/Artic
控制文件在备份中意义重大建议每次对其单独备份如果数据库版本允许的话应该设置为控制文件自动备份同时应该尽可能地增大CONTROL_FILE_RECORD_KEEP_TIME这个初始化参数的值以便备份
Java并发编程实践之ThreadLocal变量 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基本结构 CREATEORREPLACEPROCEDURE存储过程名字 ( 参数INNUMBER 参数INNUMBER )IS 变量INTEGER:=; 变量DATE; BEGIN
对于带有绑定变量的SQL语句ORACLE在第一次执行的时候将会进行绑定变量的PEEK是否PEEK是否隐含参数_OPTIM_PEEK_USER_BINDS控制默认为TRUEORACLE在第一次 P