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

Oracle存储过程中,%TYPE和%ROWTYPE是用于定义变量的重要特性。%TYPE使得变量与数据库表的列保持相同数据类型,当列类型改变时,变量类型会自动更新。%ROWTYPE则定义了一个记录,其字段与指定表的列对应。在存储过程SP_PUSH_SIGN_LOG中,使用%ROWTYPE定义了记录变量,遍历查询结果并进行相关操作,如插入数据。这提高了代码的灵活性和维护性。
摘要由CSDN通过智能技术生成

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

在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量

因为t_emp emp%rowtype

;这个语句的意思是 定义一个变量t_emp使其与EMP表具有一样的数据类型. 也就是说EMP表有哪里数据类型的字段,那么这个t_EMP变量也就能够存储什么类型的数据,而且大小范围也是一样的.(如VARCHAR2(20))

(一)使用%TYPE

PL/SQL中的变量用来存储在数据库表中的数据,所以变量和表中的列应该有相同的类型,例如按如下方式声明一个变量:

DECLARE v_code varchar2(20)

但是如果v_code这一列的定义发生了变化,例如长度发生了变化,那么导致所有使用该列的PL/SQL代码全部都要修改

但是如果使用%TYPE属性而不是将变量类型硬性编码,代码如下:

DECLARE v_code oms_outbound.code%TYPE

通过使用%TYPE,变量v_code将和表oms_outbound的列code类型相同(可以理解为将二者绑定起来)

(二)使用%ROWTYPE

在PL/SQL中讲一个记录声明为具有相同类型的数据库行时,使用%ROWTYPE

代码如下:

DECLARE v_code oms_outbound%ROWTYPE

定义了一个记录,该记录中的字段与oms_outbound表中的列相对应

存储过程代码如下:

/** 重新同步签收状态*/

PROCEDURE SP_PUSH_SIGN_LOG IS

v_order VARCHAR2(50);

v_way_bill_code VARCHAR2(50);

v_log VARCHAR2(2000);

CURSOR c IS /**声明游标,表示多行记录,每一行结构与查询结果一致 */

SELECT ts.order_no FROM tmp_sign_order ts;

c_row c%ROWTYPE; /**使用rowtype */

BEGIN

FOR c_row IN c

LOOP

SELECT t.way_bill_code INTO v_way_bill_code FROM tms_order t WHERE t.code = c_row.order_no;

v_log := '{"sign":0,"desc":"","msg":"","orderCode":"'||c_row.order_no||'","expressCode":"'||v_way_bill_code||'"}';

INSERT INTO bis_sync_error_data_pool(id,req_buss_type,params,retry_times,creator_id,creator,created_time,last_operator_id,last_operator,last_operated_time,related_code)VALUES

(seq_bis_sync_error_data_pool.nextval,'SYNC_ORDER_SIGNED',v_log,0,'1','zhoujie',SYSDATE,'1','zhoujie',SYSDATE,'zhoujie');

END LOOP;

--SELECT FROM tms_order t WHERE t.

END SP_PUSH_SIGN_LOG;

oracle存储过程中%type的含义

转: oracle存储过程中%type的含义 2018-11-07 11:43:56 lizhi_ma 阅读数 1361更多 分类专栏: 数据库   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

Oracle存储过程中跳出循环的写法

注:本文来源于: Oracle存储过程中跳出循环的写法 记录exit和return的用法 1:exit用来跳出循环 loop IF V_ ...

java 实现往oracle存储过程中传递array数组类型的参数

注:本文来源于 最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码 ...

Oracle存储过程中异常Exception的捕捉和处理

Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

Oracle存储过程中异步调用的实际操作步骤

本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用  .而有些相关的业务逻辑 ...

Python中type与Object的区别

Python中type与Object的区别 在查看了Python的API后,总算明白了.现在总结如下: 先来看object的说明: Python中关于object的说明很少,甚至只有一句话: clas ...

oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题

oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题 学习了:http://blog.csdn.net/royzhang7/article/deta ...

在ORACLE存储过程中创建临时表

在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截 ...

ORACLE中%TYPE和%ROWTYPE的使用

 1 %TYPE说明 为了使一个变量的数据类型与还有一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式.当被參照的那个变量的数据类型改变了之后,这个新定 ...

随机推荐

2016ACM青岛区域赛题解

A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

【emWin】例程四:显示文本

实验指导书及代码包下载: http://pan.baidu.com/s/1jHOYdqm

我个人结合到老师的来理解的——Asp.net Webform的页面生命周期

1.分析请求的资源路径,寻找目录中对应的资源文件,若无法找到资源文件,则返回404错误2.分析资源文件的Page命令,通过Page指令找到代码文件和类 3.将页面文件和类一起编译生成最终的类(仅仅在第 ...

[No000025]停止自嘲—IT 技术人必须思考的 15 个问题

行内的人自嘲是程序猿.屌丝和码农,行外的人也经常拿IT人调侃,那么究竟是IT人没有价值,还是没有仔细思考过自身的价值? 1.搞 IT 的是屌丝.码农.程序猿? 人们提到IT人的时候,总会想到他们呆板. ...

Yii源码阅读笔记(二十五)

Module类中剩余部分代码,通过控制器ID实例化当前模块的控制器,当前模块的Action方法的前置和后置方法: /** * This method is invoked right before a ...

Vue方法与事件

gitHub地址:https://github.com/lily1010/vue_learn/tree/master/lesson10 一 vue方法实现 ...

-25299 reason: 'Couldn't add the Keychain Item.'

今天在用苹果官方demo 提供的KeychainItemWrapper类时遇到-25299  reason: 'Couldn't add the Keychain Item.'错误,再4s上可以正常运 ...

MITK Tutorial(二)

目标: 生成MITK 插件包括一个新用户交互的视图,并调用一些ITK filters. Step 1: How to create a new MITK Plugin 可以选择用Plugin Gene ...

kafka学习笔记整理01

Apache Kafka 消息中间件->流式数据处理平台 特点: 高可靠性(分布式.分区.复制和容错).高吞吐量.持久化 消息模式:1)队列式(或点对点):在点对点消息系统中,消息被保存在队列中 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值