知识大全 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 变量

oracle--SQL变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  TransactSQL

知识大全 C中设置oracle环境变量

C中设置oracle环境变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Re:用PRO*C写

知识大全 oracle设置环境变量脚本

  #!/bin/bash  #centosoracleg前期安装环境检查脚本  #将所需要安装的包(rpm格式)与脚本放在一个目录下  ss=$PWD  cd$ss  rpmivh*rpm  #OR

知识大全 在Oracle9iisqlplus中使用替换变量

在Oracle9iisqlplus中使用替换变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 利用替换变量提高Oracle数据库系统的交互性

利用替换变量提高Oracle数据库系统的交互性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数

知识大全 oracle中怎样从sql*plus向shell传递变量

很多人在实际的工作和学习中都遇到了无法通过sqlplus向shell传递变量下面我们来介绍一个实例脚本来进行折中处理  >  下面我们再来介绍另一个实例方法  >>>cha138/Artic

知识大全 关于oracle的备份策略

  控制文件在备份中意义重大建议每次对其单独备份如果数据库版本允许的话应该设置为控制文件自动备份同时应该尽可能地增大CONTROL_FILE_RECORD_KEEP_TIME这个初始化参数的值以便备份

知识大全 Java并发编程实践之ThreadLocal变量

Java并发编程实践之ThreadLocal变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 oracle存储过程的基本语法及注意事项

  基本结构  CREATEORREPLACEPROCEDURE存储过程名字  (  参数INNUMBER  参数INNUMBER  )IS  变量INTEGER:=;  变量DATE;  BEGIN

知识大全 绑定变量的获取

  对于带有绑定变量的SQL语句ORACLE在第一次执行的时候将会进行绑定变量的PEEK是否PEEK是否隐含参数_OPTIM_PEEK_USER_BINDS控制默认为TRUEORACLE在第一次  P