美文网首页
Oracle PL/SQL (3) - 记录类型(TYPE 类型

Oracle PL/SQL (3) - 记录类型(TYPE 类型

作者: 乘风破浪的姐姐 | 来源:发表于2020-03-30 17:45 被阅读0次

对于Oracle数据类型,主要使用的是VARCHAR2、NUMBER、DATE等类型,但是这些基本数据类型,如果在进行一些实际操作的时候就会比较麻烦。
获取一个雇员的完整信息:

例如下面这个例子,各个数据类型均被单独定义.

declare
      v_claimno         emb.claim.claimno%TYPE;
      v_accidentno      emb.claim.acc_no%TYPE;
      v_totalamount     emb.claim.estimate_amount%TYPE;
      v_assigndate      emb.claim.assigndate%TYPE;
begin
      v_claimno:='541';
      select t.acc_no,t.estimate_amount,t.assigndate into v_accidentno, v_totalamount, v_assigndate from claim t where t.claimno=v_claimno;
      DBMS_OUTPUT.put_line('事故号:'||v_accidentno||'   定损总金额:'||NVL(v_totalamount,2)||'  任务分配时间:'||TO_CHAR(v_assigndate,'yyyy-mm-dd'));
  EXCEPTION
     WHEN others THEN
        RAISE_APPLICATION_ERROR(-20007,'此定损单不存在!');
end;
/

输出结果:
事故号:9040622410008F03AD
定损总金额:1862.46
任务分配时间:2020-03-30

1、定义记录类型语法

TYPE 类型名称 IS RECORD (
成员名称        数据类型 [[NOT NULL] [:= 默认值] 表达式] ,
...
成员名称        数据类型 [[NOT NULL] [:= 默认值] 表达式]
) ;
1、使用记录类型接收查询返回结果
declare
   v_claimno              emb.claim.claimno%TYPE;
   TYPE claim_type IS RECORD(
      v_accidentno      emb.claim.acc_no%TYPE,
      v_totalamount     emb.claim.estimate_amount%TYPE,
      v_assigndate      emb.claim.assigndate%TYPE         
   );
   v_claim claim_type;
begin
    v_claimno:='541';
      select t.acc_no,t.estimate_amount,t.assigndate into v_claim from claim t where t.claimno=v_claimno;
      DBMS_OUTPUT.put_line('事故号:'||v_claim.v_accidentno||'   定损总金额:'||NVL(v_claim.v_totalamount,2)||'  任务分配时间:'||TO_CHAR(v_claim.v_assigndate,'yyyy-mm-dd'));
  EXCEPTION
     WHEN others THEN
        RAISE_APPLICATION_ERROR(-20007,'此定损单不存在!');
end;
/

输出结果:
事故号:9040622410008F03AD
定损总金额:1862.46
任务分配时间:2020-03-30

2、自定义记录类型数据,声明变量,并为属性赋值.
declare
   TYPE claim_type IS RECORD(
      v_accidentno      emb.claim.acc_no%TYPE :='90406224',-- 定义默认值
      v_version     emb.claim.version%TYPE,
      v_validflag      emb.claim.valid%TYPE 
   );
   v_claim claim_type;
begin
      v_claim.v_version:='E01';-- 为记录类型成员赋值
      v_claim.v_validflag:='1';-- 为记录类型成员赋值

      DBMS_OUTPUT.put_line('事故号:'||v_claim.v_accidentno||'   版本号:'||v_claim.v_version||'  有效标识:'||v_claim.v_validflag);
  EXCEPTION
     WHEN others THEN
        RAISE_APPLICATION_ERROR(-20007,'此定损单不存在!');
end;
/

输出结果:事故号:90406224 版本号:E01 有效标识:1

3、定义嵌套的记录类型
declare
   v_claimno              emb.claim.claimno%TYPE;
   TYPE claim_type IS RECORD(
      v_accidentno      emb.claim.acc_no%TYPE,
      v_totalamount     emb.claim.estimate_amount%TYPE,
      v_assigndate      emb.claim.assigndate%TYPE         
   );
   
   TYPE config_type is RECORD (
     v_paintflag             emb.config.paintconfig%TYPE:=0,
     v_repairflag            emb.config.repairconfig%TYPE :=1,
     v_discountflag      emb.config.discountflag%TYPE:=2,
     v_claim  claim_type
   );
   
   
    v_config_type  config_type ;
begin
    v_claimno:='541';
      select t.acc_no,t.estimate_amount,t.assigndate into v_config_type.v_claim from claim t where t.claimno=v_claimno;
      DBMS_OUTPUT.put_line('事故号:'||v_config_type.v_claim.v_accidentno||'   定损总金额:'||NVL(v_config_type.v_claim.v_totalamount,2)
      ||'  任务分配时间:'||TO_CHAR(v_config_type.v_claim.v_assigndate,'yyyy-mm-dd')||'  喷漆标识'||v_config_type.v_paintflag||'  维修标识'
      ||v_config_type.v_repairflag||'  折扣标识'||v_config_type.v_discountflag);
  EXCEPTION
     WHEN others THEN
        RAISE_APPLICATION_ERROR(-20007,'此定损单不存在!');
end;
/

输出结果:
事故号:9040622410008F03AD 定损总金额:1862.46 任务分配时间:2020-03-30 喷漆标识0 维修标识1 折扣标识2

4、插入记录,利用记录类型保存数据
DECLARE
    TYPE config_type is RECORD (
     v_paintflag             emb.config.paintconfig%TYPE:=0,
     v_repairflag            emb.config.repairconfig%TYPE :=1,
     v_discountflag      emb.config.discountflag%TYPE:=2,
     v_claim  claim_type
   );
    v_config_type  config_type ;
BEGIN
  v_config_type.v_paintflag := 0 ;
  v_config_type.repairconfig := 1 ;
  v_config_type.discountflag := 2 ;
INSERT INTO config VALUES v_config_type ;     -- 直接插入记录类型的数据
END ;
/
5、不需要插入全表数据,插入指定栏位的数据
DECLARE
    TYPE config_type is RECORD (
     v_paintflag             emb.config.paintconfig%TYPE,
     v_repairflag            emb.config.repairconfig%TYPE,
     v_discountflag          emb.config.discountflag%TYPE,
     v_claim  claim_type
   );
    v_config_type  config_type ;
BEGIN
  v_config_type.v_paintflag := 0 ;
  v_config_type.repairconfig := 1 ;
  v_config_type.discountflag := 2 ;
INSERT INTO config(paintconfig,repairconfig,discountflag) VALUES (v_config_type.v_paintflag,v_config_type.v_repairflag,v_config_type.v_discountflag) ;     -- 直接插入记录类型的数据
END ;
/
6、修改数据,利用记录类型保存数据
DECLARE
    v_claimno              emb.claim.claimno%TYPE:='541';
    TYPE config_type is RECORD (
     v_paintflag             emb.config.paintconfig%TYPE,
     v_repairflag            emb.config.repairconfig%TYPE,
     v_discountflag      emb.config.discountflag%TYPE,
     v_claim  claim_type
   );
    v_config_type  config_type ;
BEGIN
  v_config_type.v_paintflag := 1 ;
  v_config_type.repairconfig := 0 ;
  v_config_type.discountflag := 1 ;
UPDATE  config SET ROW=v_config_type WHERE  claimno=v_claimno;      
END ;
/

相关文章

  • Oracle PL/SQL (3) - 记录类型(TYPE 类型

    对于Oracle数据类型,主要使用的是VARCHAR2、NUMBER、DATE等类型,但是这些基本数据类型,如果在...

  • Oracle对象类型

    PL/SQL允许定义一个对象类型,这有助于在Oracle的数据库中设计的面向对象。对象类型可以包装复合类型。 创建...

  • Oracle PL/SQL 记录型数据类型

    记录型变量:取表中的一行的类型作为变量的类型,可以把记录型变量理解成一个数组,而数组中的每一个元素代表每一列的数据...

  • 子程序的开发:包

    包用于 组合 PL/SQL类型、PL/SQL项、PL/SQL子程序,由 包规范、包体 组成. 一、建立包 建立包时...

  • PL/SQL

    1.什么是PL/SQL PL/SQL(Procedure Language/SQL)PL/SQL是Oracle对s...

  • Oracle PL/SQL引用数据类型

    Oracle的引用数据类型,是指定义一个变量,这个变量的类型和某张表中的的一个字段类型一样,这样做的好处是,当表中...

  • JAVA学习笔记(PL/SQL)

    1.1什么是PL/SQL PL/SQL(ProceduralLanguage/SQL)是Oracle在标准SQL的...

  • PL_SQL_Oracle基础教程.pdf

    【下载地址】 PL /SQL基础教程-PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL...

  • PL/SQL基础

    1.PL/SQL pl/sql (procedural language/sql) 是 Oracle 在标准的 s...

  • oracle工具PL/SQL快速入门1简介

    什么是PL/SQL? PL/SQL是Oracle中使用的结构化查询语言(SQL)的扩展。 与SQL不同,PL/SQ...

网友评论

      本文标题:Oracle PL/SQL (3) - 记录类型(TYPE 类型

      本文链接:https://www.haomeiwen.com/subject/zqnmuhtx.html