Oracle PL/SQL中使用%TYPE和%ROWTYPE的区别

PL/SQL的%type 和%rowtype属性类型和Record记录类型 1.%TYPE %TYPE简单将其理解成可被复制的属性,什么意思? A = B%type:B赋值给A,%type附加条件A随B值变化而变化。说得再人性化点就是A复制了B,A随B的值变化而变化 --查询员工号为7499的补助 declare empcom emp.comm%type ; --声明一个empcom变量 begin select comm into empcom from emp where empno = 7499 ;--将查到的comm类型的结果值放到 empcom... 阅读详情

%TYPE:

定义一个变量,其数据类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。

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

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

declare  
  --定义一个记录类型  
  type emp_record is record(  
    v_name employees.last_name%type,  
    v_email employees.email%type,  
    v_salary employees.salary%type,  
    v_job_id employees.job_id%type);  

  --声明自定义记录类型的变量  
  v_emp_record emp_record;  
begin  
  --通过 select ... into ... 语句为变量赋值  
 select last_name, email, salary, job_id into v_emp_record  
 from employees  
 where employee_id = 101;  

 -- 打印变量的值  
 dbms_output.put_line(v_emp_record.v_name || ', ' || v_emp_record.v_email || ', ' ||    
                                        v_emp_record.v_salary || ', ' ||  v_emp_record.v_job_id);  
end;  

返回结果:

Kochhar, NKOCHHAR, 17000, AD_VP  
PL/SQL procedure successfully completed  

%ROWTYPE:

PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。

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

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

DECLARE
    v_emp_record employees%ROWTYPE;
BEGIN
    -- 通过 select ... into ... 语句为变量赋值  
    SELECT *
    INTO v_emp_record
    FROM employees
    WHERE employee_id = 101;
    dbms_output.put_line(v_emp_record.last_name || ', ' || v_emp_record.email || ', ' || v_emp_record.salary || ', ' || v_emp_record.job_id || ', ' || v_emp_record.hire_date);
END;

返回结果:

Kochhar, NKOCHHAR, 17000, AD_VP, 21-9月 -89  
PL/SQL procedure successfully completed  

记录类型:

记录类型是把 逻辑相关 的数据作为一个单元存储起来 ,称作 PL/SQL RECORD 的域(FIELD) ,其作用是存放互不相同但逻辑相关的信息。

定义记录类型语法如下:

TYPE record_type IS RECORD
(
 Field1 type1 [NOT NULL] [:= exp1 ],
 Field2 type2 [NOT NULL] [:= exp2 ],
 . . . . . .
 Fieldn typen [NOT NULL] [:= expn ] 
) ;

提示 :

1) DBMS_OUTPUT.PUT_LINE 过程的功能类似于 Java 中的 System.out.println() 直接将输出结果送到标准输出中 .
2) 在使用上述过程之前必须将 SQL * PLUS 的环境参数 SERVEROUTPUT 设置为 ON, 否则将看不到输出结果 :

set serveroutput on  

可以用 SELECT 语句对记录变量进行赋值,, 只要保证记录字段与查询结果列表中的字段相配即可。


ORACLE中%TYPE和%ROWTYPE的使用

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中运行

基于GIS的生态安全网络格局构建(附练习数据下载) 阅读详情

相关推荐

光储微电网混合储能系统的控制策略

随着社会生产力的不断提高,对不可再生资源的大量消耗,人们已经意识到发展可再生能源的重要性,因此微电网技术作为再生能源利用的有效形式被快速发展。蓄电池容量无限大是传统光储微电网混合储能系统控制策略一种理想形式,但实际上蓄电池的容量是有限度的,传统控制策略在蓄电池剩余电量达到阖值时将无法正常使用,由此提出了光储微电网混合储能系统的新型控制策略,又结合实际情况,对开关进行了改进,利用开关与二极管并联,使其拥有四种工作状态,当储能元件剩余电量达到阈值时,可自动恢复电量降低成本,提高并输出电池电能质量。

nhkg888的博客 1730

PLSQL的两个属性类型%type 和%rowtype

定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。 说白了就是将查询到的某个列的结果要赋给 一个变量这会就用到了 %TYPE 例: ---查询员工号为7369的补助 declare empcom emp.comm%type ; --声明一个empcom变量 begin select comm into empcom...

qq7652401741的博客 1469

vcpkg管理OpenCASCADE的5个高效技巧:从多版本共存到离线部署

本文详细介绍了使用vcpkg高效管理OpenCASCADE的5个实用技巧,包括多版本共存、性能优化、团队共享、CI/CD集成和离线部署。通过自动配置和版本控制,vcpkg显著简化了OpenCASCADE的开发环境管理,特别适合工业级CAD开发场景。

rain6的博客 187

oracle 中 %TYPE %ROWTYPE

PL/SQL 提供了 %TYPE 和 %ROWTYPE 两种特殊的变量,用于声明与表的列相匹配的变量和用户定义数据类型,前一个表示单属性的数据类型,后一个表示整个属性列表的结构,即元组的类型。-- 数据表TB_TRANS_RECORD-- 定义一个与表TB_TRANS_RECORD中FEE类型相同的变量DECLARE-- 定义一个与表TB_TRANS_RECORD结构相同的数组DECLARE-- 为数组中的变量赋值BEGIN。

KevinChen2019的博客 2154

图像评价之计算PSNR、SSIM、MSE、LPIPS和NIQE评价指标

如果代码对你的研究有所帮助,请为该仓库点上小星星。

书山有路,学海无涯! 2636

ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项

参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.youkuaiyun.com/weixin_38218267/article/details/1

aizaiyueye的专栏 3448

PL/SQL 特殊数据类型%TYPE,RECORD,%ROWTYPE

PL/SQL 特殊数据类型%TYPE,RECORD,%ROWTYPE

lxslf的博客 862

基于ARKitScenes和YOLOv11的元宇宙3D物体检测系统设计与实现

引言随着元宇宙概念的兴起和增强现实(AR)技术的快速发展,3D物体检测成为了计算机视觉领域的重要研究方向。与传统的2D物体检测不同,3D物体检测不仅需要识别物体类别,还需要估计物体在三维空间中的位置、大小和朝向。本文将详细介绍如何利用ARKitScenes数据集和YOLOv11算法构建一个完整的3D物体检测系统,并提供可视化UI界面。相关工作与技术背景2.1 ARKitScenes数据集介绍ARKitScenes是苹果公司发布的一个大规模的3D场景理解数据集,包含丰富的室内场景数据。

YOLO 411

%ROWTYPE&%TYPE——PL/SQL语言元素

TYPE、%ROWTYPE均指"引用"数据类型,两者都是用来定义变量类型的。

liwenn1234的博客 1219

网规第三版:第4章网络资源设备(完结)

第 4 章 网络资源设备 调整内容: 更新主流网络设备(交换机、路由器、防火墙)的技术参数与选型标准 增加国产化网络设备与信创产品的相关内容 精简已淘汰的设备类型与技术指标

鹿鸣天涯 266

事件驱动的 SAP 工作流:从 BOR 事件到 Event Linkage 的落地与排障全景图

摘要: SAP工作流中的Event是业务对象状态变化的系统广播机制,如发票录入、采购订单释放等事件。通过事件驱动,业务程序与流程引擎解耦,业务只需发布事件,流程引擎负责后续处理。文章详细解析了SAP工作流事件的完整链路,包括事件定义、触发机制、事件容器传递、SWE2配置的关键作用,以及事件不触发时的排查方法。重点介绍了事件在启动流程、终止任务、等待步骤和主动创建中的应用,并结合采购订单审批案例说明事件的实际使用场景和配置要点。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 187

Oracle中%type和%rowtype的区别

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

qq_33396462的博客 1271

课设:FPGA音频均衡器 verilog设计及仿真 加报告

未来,随着FPGA技术的进一步发展和应用场景的扩大,FPGA音频均衡器将发挥出更大的作用,并为音频领域带来更多创新和突破。(a)音乐制作:均衡器可以调整音频信号中不同频段的能量分布,使得乐器声音更加明亮、动感,从而提升音乐制作的质量和创作的灵活性。以上步骤提供了设计一个音频均衡器的大致过程,但值得注意的是,具体实现的细节和复杂度可能因设计要求和所使用的平台而有所不同。确保设计满足预期的性能和要求。确定均衡器的功能和要求:定义你的音频均衡器需要实现的功能,包括频率范围、增益范围以及可调参数数量等。

QQ_778132974的博客 1586

%type与%rowtype区别 * 博客分类: oracle SQL Sql代码 收藏代码 1. %TYPE:属性的一种方式是在变量声...

%type与%rowtype区别 * 博客分类: oracle SQL Sql代码 收藏代码 1. %TYPE:属性的一种方式是在变量声明中使用。%ROWTYPE是用于取得表或游标中的字段类型, 2. 例如,可以使用它来声明 ARTIST表中字段类型相同的变量,注意可以在表中名和字段之间使用点号(.)。 3. DEALARE ...

shohoku10837755的博客 146

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Oracle】PL/SQL中的引用数据类型和复合数据类型

-- 在enameList末端添加一个空元素

会飞的大象 1784

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

存储过程游标

<br />%ROWTYPE<br /> http://www.javaeye.com/search?type=all&query=%25ROWTYPE<br /><br /> 获取REF CURSOR<br /> http://www.javaeye.com/search?type=all&query=%E8%8E%B7%E5%8F%96REF+CURSOR<br /><br /> oracle 存储过程 带游标作为OUT参数输出<br /> http://www.javaeye.com/top

lovelirui的专栏 505

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

PL/SQL程序结构

PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。

qq_62687015的博客 1480

oracle面试题

作用:1.在开发中,有时候为了某种特定的业务功能,需要对数据库进行多次的连接关闭,这种连接关闭是很耗费资源的。创建索引的时候,oracle会先在表空间中给索引开辟一个空间,并按索引字段对应的值进行分组,并把分好组的地址rowId存入索引空间中,当再次查询的时候,数据库会自动判断查询的条件中是否建有索引,如果有,则根据索引去查询符合条件的数据。一般在数据比较大的表中并且经常查询的字段上才建立索引,数据量小或者不经常查询的字段建立索引的话,不仅占用内存空间,而且会降低查询效率,索引不是越多越好。

weixin_43247990的博客 426

企业级框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数

​ PL/SQL(Procedure Language/SQL)是 Oracle 对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句(如分支、循环等),使 SQL 语言具有过程处理能力。把 SQL 语言的数据操纵能力与过程语言的数据处理能力结合起来,使得 PLSQL 面向过程但比过程语言简单、高效、灵活和实用。当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发。

张晨光老师的播客 667

Oracle %TYPE和%ROWTYPE

1. 使用%TYPE   在许多情况下,PL/SQL变量可以用来存储在数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。例如,students表的first_name列的类型为VARCHAR2(20),我们可以按照下述方式声明一个变量:   DECLARE    v_FirstName VARCHAR2(20);    但是如果first_name列的定义改变了会发生什么(比如

产品经理,程序人生 2248

oracle中rowtype,ORACLE存储过程中%TYPE和%ROWTYPE的区别

ORACLE存储过程中%TYPE和%ROWTYPE的区别在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量因为t_emp emp%rowtype;这个语句的意思是 定义一个变量t_emp使其与EMP表具有一样的数据类型. 也就是说EMP表有哪里数据类型的字段,那么这个t_EMP变量也就能够存储什么类型的数据,而且大小范围也是一样的.(如VARCHAR2(20))(一)使用%TY...

weixin_39706367的博客 1586

%TYPE和%ROWTYPE的区别

%TYPE和%ROWTYPE都用来定义变量类型。 %TYPE利用已经存在的数据类型来定义新的数据类型 。最常见的就是把表中西段类型 作为变量或者常量的数据类型。 比如 DECLARE      v_EmpName  emp.ename%TYPE;    BEGIN      SELECT ename INTO v_EmpName FROM emp WHERE ROWNUM

c_w_d的博客 3660

oracle procedure type,ORACLE存储过程中%TYPE和%ROWTYPE的区别

ORACLE存储过程中%TYPE和%ROWTYPE的区别在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量因为t_emp emp%rowtype ;这个语句的意思是 定义一个变量t_emp使其与EMP表具有一样的数据类型. 也就是说EMP表有哪里数据类型的字段,那么这个t_EMP变量也就能够存储什么类型的数据,而且大小范围也是一样的.(如VARCHAR2(20))(一)使用%T...

weixin_39960147的博客 415

ORACLE存储过程中%TYPE和%ROWTYPE的区别

ORACLE存储过程中%TYPE和%ROWTYPE的区别 在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量 因为t_emp emp%rowtype ;这个语句的意思是 定义一个变量t_emp使其与EMP表具有一样的数据类型. 也就是说EMP表有哪里数据类型的字段,那么这个t_EMP变量也就能够存储什么类型的数据,而且大小范围也是一样的.(如VARCHAR2(20)) (...

weixin_34025151的博客 365

pl/sql %type和%rowtype区别

一:%Type功能 SQL> set serveroutput onSQL> select * from temp_table; NUM_COL CHAR_COL---------- -----------...

141

ORACLE中%TYPE和%ROWTYPE的使用

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

weixin_34127717的博客 94
上一篇: SQL语句中:简单Case函数和Case搜索函数
下一篇: Oracle中RECORD、VARRAY、TABLE的使用详解
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值