ORACLE中%TYPE和%ROWTYPE的使用

【Hypermesh】TetraMesh Panel 常用选项详解 结合Hypermesh 2020 帮助文档和自己的一点使用经验,整理了这个博客。 阅读详情

1、%TYPE

为了使一个新定义的变量与另一个已经定义了的变量(通常是表的某一列)的数据类型保持一致,Oracle提供了%Type的定义方式,当被参照的那个变量的数据类型发生改变时,那么这个新定义的变量的数据类型也会随之发生改变,这种定义方式类似与其他编程语言中的”var“,其类型不由自己决定。而是由与之关联的对象决定。这样就不用修改Sql语句了,当不能确切的知道那个变量的类型是,就采用这种方法来定义变量的数据类型。

DECLARE   
  V_ORG_NAME SF_ORG.ORG_NAME%TYPE; --与ORG_NAME类型相同  
  V_PARENT_ID SF_ORG.PARENT_ID%TYPE;--与PARENT_ID类型相同  
BEGIN  
  SELECT ORG_NAME,PARENT_ID INTO V_ORG_NAME,V_PARENT_ID  
  FROM SF_ORG SO  
  WHERE SO.ORG_ID=&ORG_ID;  
  DBMS_OUTPUT.PUT_LINE('部门名称:' || V_ORG_NAME);  
  DBMS_OUTPUT.PUT_LINE('上级部门编码:' || TO_CHAR(V_PARENT_ID));  
END;  

2、%RowType

如果一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表示表中各个列的变量要简洁得多,并且不容易遗漏、出错。这样会增加程序的可维护性。

为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个表的结构及其数据类型时,就只能采用这种方法定义变量的数据类型。

一行记录可以保存从一个表或游标中查询到的整个数据行的各列数据。一行记录的各个列与表中一行的各个列有相同的名称和数据类型。

DECLARE   
  V_SF_ORG_REC SF_ORG%ROWTYPE; --与SF_ORG表中的各个列相同  
BEGIN  
  SELECT * INTO V_SF_ORG_REC  
  FROM SF_ORG SO  
  WHERE SO.ORG_ID=&ORG_ID;  
  DBMS_OUTPUT.PUT_LINE('部门ID:' || TO_CHAR(V_SF_ORG_REC.ORG_ID));  
  DBMS_OUTPUT.PUT_LINE('部门名称:' || V_SF_ORG_REC.ORG_NAME);  
  DBMS_OUTPUT.PUT_LINE('上级部门编码:' || TO_CHAR(V_SF_ORG_REC.PARENT_ID));  
END;  

注:上面的代码在Sql plus中运行


%TYPE 和 %ROWTYPE 的使用

%TYPE 用在变量的声明里,用于取得表中的字段类型;

%ROWTYPE 用于声明基于某个表的行类型;

示例:

%ROWTYPE 使用

    DECLARE
      CURSOR pdct_cur
      IS SELECT * FROM PRODUCTINFO;

      cur_prodcrd productinfo%ROWTYPE;

      BEGIN 
        OPEN pdct_cur;
          FETCH pdct_cur INTO cur_prodrcd;
          DBMS_OUTPUT_PUTLINE(cur_prodrcd.productid || '-' || cur_prodrcd.productname);
        CLOSE pdct_cur;
      END;

%TYPE 使用

    DECLARE
      cur_productid varchar(10);
      cur_prodctname productinfo.productname%TYPE;

      CURSOR pdct_cur
      IS SELECT productid,productname FROM PRODUCTINFO;

      BEGIN 
        OPEN pdct_cur;
          FETCH pdct_cur INTO cur_productid ,cur_productname;
          DBMS_OUTPUT_PUTLINE(productid || '-' ||productname);
        CLOSE pdct_cur;
      END;

简述%TYPE和%ROWTYPE的用法

基础概念:

%TYPE概念:

为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个变量的数据类型时,就只能采用这种方法定义变量的数据类型。

使用%TYPE特性的优点在于:

  • 所引用的数据库列的数据类型可以不必知道。
  • 所引用的数据库列的数据类型可以实时改变。

%ROWTYPE概念:

如果一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表示表中各个列的变量要简洁得多,并且不容易遗漏、出错。这样会增加程序的可维护性。

为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个表的结构及其数据类型时,就只能采用这种方法定义变量的数据类型。

一行记录可以保存从一个表或游标中查询到的整个数据行的各列数据。一行记录的各个列与表中一行的各个列有相同的名称和数据类型。

使用%ROWTYPE特性的优点在于:

  • 所引用的数据库中列的个数和数据类型可以不必知道。
  • 所引用的数据库中列的个数和数据类型可以实时改变。

简单实例

--学生结构表
CREATE TABLE STUDENT
(
ID INT NOT NULL, --学生主键ID
NAME VARCHAR2(50),--学生名称
SEX INT --学生性别 0='男' 1='女'
);

--学生信息
INSERT INTO STUDENT(ID, NAME, sex) VALUES(1, 'mike',0);
INSERT INTO STUDENT(ID, NAME, sex) VALUES(2, 'vancy',1);

--%TYPE实例1,简单写法
DECLARE
  V_NAME STUDENT.NAME%TYPE; --与NAME类型相同
  V_SEX STUDENT.SEX%TYPE; --与SEX类型相同
BEGIN
  SELECT t.name,t.sex INTO V_NAME,V_SEX
  FROM STUDENT t
  WHERE t.id = &ID;
  DBMS_OUTPUT.put_line('学生姓名:' || V_NAME);
  DBMS_OUTPUT.put_line('学生性别:' || V_SEX);
END;

--%TYPE实例2,结合type自定义类型使用
DECLARE
  --定义一个记录类型
  TYPE STUINFO_RECORD IS RECORD(
     V_NAME STUDENT.NAME%TYPE, --与NAME类型相同
     V_SEX STUDENT.SEX%TYPE --与SEX类型相同
  );
  --声明自定义记录类型变量
  V_STUINFO_RECORD STUINFO_RECORD;
BEGIN
  SELECT t.name,t.sex INTO V_STUINFO_RECORD
  FROM STUDENT t
  WHERE t.id = &ID;
  DBMS_OUTPUT.put_line('学生姓名:' || V_STUINFO_RECORD.V_NAME);
  DBMS_OUTPUT.put_line('学生性别:' || V_STUINFO_RECORD.V_SEX);
END;

--%ROWTYPE实例
DECLARE 
  V_STUDENT STUDENT%ROWTYPE; --与STUDENT表中的各个列相同
BEGIN
  SELECT * INTO V_STUDENT
  FROM STUDENT t
  WHERE t.id=&ID;
  DBMS_OUTPUT.PUT_LINE('学生ID:' || V_STUDENT.ID);
  DBMS_OUTPUT.put_line('学生姓名:' || V_STUDENT.NAME);
  DBMS_OUTPUT.put_line('学生性别:' || V_STUDENT.SEX);
END;

Oracle中 %ROWTYPE:

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

用到%ROWTYPE作用是:当查询整行的时候(SELECT * FROM EMP;),那么效率比每一个字段对应快。

例如:

 v_info emp%ROWTYPE; //该类型为emp表中的一行数据类型
v_cinfo c_emp%ROWTYPE //该类型为游标c_emp中的一行数据类型

下面是一个例子:

Oracle代码

declare  
r_emp emp%ROWTYPE;   --该类型为emp表中一行的类型  
cursor c_emp is SELECT * FROM emp ;  
BEGIN  
  OPEN c_emp;  
  LOOP  
    FETCH c_emp into r_emp;     --游标中查询出来的一行into进定义的变量r_emp中  
    EXIT WHEN c_emp%NOTFOUND;  
    dbms_output.put_line('员工姓名:' || r_emp.ename);     
  END LOOP;  
  CLOSE c_emp;  
END;  
同花顺API实战指南:从零搭建股票数据自动化采集系统 本文提供了一份详尽的同花顺API实战指南,手把手教你从零开始搭建股票数据自动化采集系统。内容涵盖API权限申请、Python环境配置、数据采集与存储脚本编写、自动化定时任务实现以及数据清洗等核心环节,旨在帮助量化交易与数据分析爱好者构建稳定可靠的数据源,解放双手,提升研究效率。 阅读详情

相关推荐

JAVA + 海康威视SDK + FFmpeg+ SRS 实现海康威视摄像头二次开发

海康威视SDK接入方案摘要 本文介绍了使用海康威视官方SDK开发物联网平台摄像头接入功能的完整方案。系统采用Java后端集成HCNetSDK控制摄像头,通过FFmpeg将RTSP流转为RTMP推送到SRS流媒体服务器,前端基于HTTP-FLV协议实现视频播放。文章详细说明了开发准备工作,包括SDK下载、SRS部署、FFmpeg安装等关键步骤,并提供了数据库表设计和接口定义。核心部分展示了如何集成海康SDK,包括提取必要代码、加载DLL文件、配置打包插件等具体实现细节,最终形成了一套支持实时预览、回放和下载的

2401_83057947的博客 2258

简述%TYPE和%ROWTYPE的用法

基础概念:%TYPE概念:为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个变量的数据类型时,就只能采用这种方法定义变量的数据类型。使用%TYPE特性的优点在于: 所引用的

Mike_ToUp 1万+

【UE 反射】反射的原理是什么?如何使用机制?

静态类型检查确保了类型的早期一致性和高效的代码执行,但减少了灵活性。动态类型检查提供了更大的灵活性,但增加了运行时的开销和潜在的错误。反射作为一种动态特性,无论是在静态类型语言还是动态类型语言中,都提供了强大的运行时类型操作能力,但也伴随着性能和安全性方面的权衡。通过理解这些联系,开发者可以在不同的编程语言和应用场景中选择适合的类型检查方式和反射机制,以实现所需的动态行为和灵活性,同时保证性能和安全性。

hhw_hhw的博客 6031

oracle数据库之%rowtype用法

cursor是c_product, r_product c_product%rowtype; r_product 是cursor查询出的所有字段,然后用 r_product.claimno r_product.stu 可以使用具体的某个字段的值,当字段特别多的时候用%rowtype相当节省功夫。 %ROWTYPE 表示该类型为行数据类型,存储的时候为一行数据,一行有很多列,相当于表中的一行数据,也可以的游标中的一行数据。 用到%ROWTYPE作用是:当查询整行的时候 select * from emp;

数据库技术 7089

Computers & Security 投稿实战:从零到一详解避坑指南

本文详细解析了向《Computers & Security》投稿的全流程避坑指南,包括ORCID账号注册、文件格式统一、Editorial Manager®系统操作技巧等关键步骤。特别强调了cover letter撰写、Declaration of Interest Statement准备以及PDF生成后的检查要点,帮助研究者高效完成投稿流程。

weixin_29228203的博客 672

Ubuntu22.04实战:基于VLLM高效部署Qwen3系列模型并构建Dify智能体

本文详细介绍了在Ubuntu22.04系统上使用VLLM高效部署Qwen3系列模型并集成Dify平台的实战指南。从环境配置、Conda管理到VLLM优化部署,再到Dify智能体构建,提供了全面的技术方案和性能调优建议,帮助开发者快速实现AI模型的高效部署与应用。

weixin_28323057的博客 161

oracle教程:属性类型type和rowtype

1、在变量较少的情况下,定义的变量是某个表的某列字段,可以采用。2、在变量较多的情况下,可以采用纪录型,把表名定义成变量表名%rowtype。

学亮编程手记 1566

第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程

🥏第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

oracle数据库中,存储过程中 %rowtype 类型的用法有啥限制吗?

tags:篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库中,存储过程中 %rowtype 类型的用法有啥限制吗?相关的知识,希望对你有一定的参考价值。oracle数据库中,存储过程中保证select后面查询的字段和emp表的字段顺序以及结果是一样的,请问from后面能接n个表查询, 然后通过%rowtype这种形式的变量插入到数据库的emp中吗?

男神的专栏 1249

推荐11个顶级的Claude Code Skills

ClaudeCode的Skills系统为程序员提供了11个强大的AI辅助工具,包括代码审查、重构建议、单元测试生成、API文档自动生成、性能分析、安全扫描、数据库迁移脚本生成、CI/CD配置、依赖管理、ER图生成和日志分析等功能。这些"技能包"可大幅提升开发效率,从代码质量到协作沟通全方位优化工作流程。用户可根据需求选择2-3个核心功能开始尝试,熟练后还可自定义Skills。该系统需要配合Anthropic的API使用,建议先在小型项目测试再应用于核心业务。

分享AI、区块链技术及应用,未来已来 1846

【AVRCP】规范精讲[19]: 媒体属性全解析,让你的蓝牙设备显示完整歌曲信息

AVRCP协议中的媒体属性是蓝牙音频设备传输歌曲元数据的关键,包含标题、艺术家、专辑等32位ID标识的键值对信息。规范要求字符串属性必须使用UTF-8编码,但乱码问题频发(如中文显示异常),主因是设备未遵循编码标准或使用GBK等非规范格式。常见问题包括信息不全(仅显示标题)、封面缺失(因带宽限制或格式不支持)及更新延迟(通知机制未启用)。解决方案包括强制UTF-8编码、优化封面大小(如300x300像素JPEG)、主动请求缺失属性。Android示例代码展示了通过广播接收器解析媒体属性的方法。

byte轻骑兵的技术小窝 1万+

数据库问题——%type 和 %rowtype 的使用

一.%TYPE 解释:type的使用时为了使一个新定义的变量与另一个已经定义了的变量(通常是表的某一列)的数据类型保持一致, 当被参照的那个变量的数据类型发生改变时,那么这个新定义的变量的数据类型也会随之发生改变,这种定义方式类似与其他编程语言中的"var",其类型不由自己决定,而是由与之关联的对象决定。 优点:当参数类型发生变化的时候不用修改Sql语句了,当不能确切的知道那个变量的类型是,...

Mr_楠先森的博客 4555

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Oracle中%Type和%RowType的使用

Oracle中%Type和%RowType的使用 参考文档 https://docs.oracle.com/database/121/LNPLS/type_attribute.htm#LNPLS01352 https://docs.oracle.com/database/121/LNPLS/rowtype_attribute.htm#LNPLS01342 1.语法 %TYPE %ROWTYPE 2.%TYPE和%ROWTYPE的区别 相同点 1)%TYPE和%ROWTYPE都是继承表的字段类型和长度,不

yiyiyaya519的博客 2005

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

Oracle PL/SQL中如何使用%TYPE和%ROWTYPE By tigertop 发表于 2005-11-22 14:39:00 1. 使用%TYPE 在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。例如,students表的first_name列的类型为VARCHAR2(20),我们可以按照下述方式声明一个变量:

bianfuxia的专栏 1458

ORACLE中%TYPE和%ROWTYPE的使用详解

为了使一个新定义的变量与另一个已经定义了的变量(通常是表的某一列)的数据类型保持一致,Oracle提供了%Type的定义方式,当被参照的那个变量的数据类型发生改变时,那么这个新定义的变量的数据类型也会随之发生改变,这种定义方式类似与其他编程语言中的"var",其类型不由自己决定。这样就不用修改Sql语句了,当不能确切的知道那个变量的类型是,就采用这种方法来定义变量的数据类型。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。

sinat_40572875的博客 1938

ORACLE中使用%TYPE和%ROWTYPE定义变量的类型

ORACLE中使用%TYPE和%ROWTYPE定义变量的类型 一、%TYPE的用法 定义变量时可以使变量与另一个已经定义好的变量(通常是表中的一列)的数据类型保持一致,可以使用%Type的方式。使用%Type定义变量的好处是:当被参照的那个变量的数据类型发生变化时,该变量的数据类型也会随着发生变化,该变量的类型不由自己决定,而是由与之关联的对象决定。 例如:输入一个部门的编号,显示出这个部门的名称...

睿思达DBA 2249

%rowtype mysql_Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

本文章简单的介绍了Oracle PL/SQL中如何使用%TYPE和%ROWTYPE,有需要了解的朋友可以参考一下下。本文章简单的介绍了Oracle PL/SQL中如何使用%TYPE和%ROWTYPE,有需要了解的朋友可以参考一下下。1. 使用%TYPE在许多情况下,PL/SQL变量可以用来存储在表中的数据。在这种情况下,变量应该拥有与表列相同的类型。例如,students表的first_name列...

weixin_39945523的博客 98

Oracle type怎么使用_Oracle PL/SQL中使用%TYPE和%ROWTYPE的方法

Oracle PL/SQL中如何使用%TYPE和%ROWTYPE1. 使用%TYPE在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。例如,students表的first_name列的类型为VARCHAR2(20),我们可以按照下述方式声明一个变量:DECLAREv_FirstName VARCHAR2(20);但是如果first_name列...

weixin_29463587的博客 234

oracle 生命变量,Oracle 中使用的%TYPE和%ROWTYPE类型的变量和复合变量

Oracle中使用的%TYPE和%ROWTYPE类型的变量和复合变量在定义变量时处理可以使用oracle规定的数据类型外,还可以使用%TYPE和%ROWTYPE来定义变量.%TYPE类型的变量是专门为存储在数据列中检索到的值而创建的.对于使用%TYPE创建的变量,其数据类型由系统根据检索的数据列的数据类型决定.%ROWTYPE类型的变量,它可以一次存储从数据库检索的一行数据。当你不知道表中的数据类...

weixin_42386361的博客 776

oracle引用 rowtype,Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

Oracle PL/SQL中如何使用%TYPE和%ROWTYPE1. 使用%TYPE在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。例如,students表的first_name列的类型为VARCHAR2(20),我们可以按照下述方式声明一个变量:DECLAREv_FirstName VARCHAR2(20);但是如果first_name列...

weixin_35794520的博客 399

Oracle 中使用的%TYPE和%ROWTYPE类型的变量和复合变量

在定义变量时处理可以使用oracle规定的数据类型外,还可以使用%TYPE和%ROWTYPE来定义变量.      %TYPE类型的变量是专门为存储在数据列中检索到的值而创建的.对于使用%TYPE创建的变量,其数据类型由系统根据检索的数据列的数据类型决定.      %ROWTYPE类型的变量,它可以一次存储从数据库检索的一行数据。 当你不知道表中的数据类型是什么时候?那你就考虑%TYPE来

pg_Roger的专栏 1243
上一篇: Mysql存储过程中使用多游标
下一篇: Oracle游标遍历%rowtype中的记录
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值