ORACLE存储过程中%TYPE和%ROWTYPE的区别
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和%ROWTYPE的区别的更多相关文章
- oracle存储过程中%type的含义
转: oracle存储过程中%type的含义 2018-11-07 11:43:56 lizhi_ma 阅读数 1361更多 分类专栏: 数据库 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- Oracle存储过程中跳出循环的写法
注:本文来源于: < Oracle存储过程中跳出循环的写法 > Oracle存储过程中跳出循环的写法 记录exit和return的用法 1:exit用来跳出循环 loop IF V_ ...
- java 实现往oracle存储过程中传递array数组类型的参数
注:本文来源于 < 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定义方式.当被參照的那个变量的数据类型改变了之后,这个新定 ...
随机推荐
- 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片
我们就把这个问题叫做图片查看器吧,它的主要功能有: (项目地址:https://github.com/TZHANHONG/ImageViewer/releases/tag/1.0,里面的MyImage ...
- 嵌套RecyclerView左右滑动替代自定义view
以前的左右滑动效果采用自定义scrollview或者linearlayout来实现,recyclerview可以很好的做这个功能,一般的需求就是要么一个独立的左右滑动效果,要么在一个列表里的中间部分一 ...
- Windows系统java下载与安装
Windows系统java下载与安装 一.前言 作者:深圳-风尘 联系方式:QQ群[585499566] 博客:https://www.cnblogs.com/1fengchen1/ 能读懂本文档人: ...
- uni-app 如何在当前页调上个页面的方法
1.获取上个页面 var pages = getCurrentPages();//当前页 var beforePage = pages[pages.length - 2];//上个页面 2.在当前页调 ...
- mssql sql server 系统更新,如何正确的增加表字段
转自: http://www.maomao365.com/?p=5277摘要:下文主要讲述,如何对"已上线的系统"中的表,增加新的字段. 系统部署脚本,增加列的方法:在系统脚本发布 ...
- python高级(1)—— 基础回顾1
Python基础回顾 认识变量 在学习了之前的Python零基础入门系列[洗礼灵魂,修炼Python](说明一下,这个系列现在回过来再来看这个名字确实好土啊,然后有些知识点感觉还不太精准,后期看如果有 ...
- c/c++ allocator 使用
allocator 使用 作用:只开辟空间,不调用构造函数 操作一览表 allocator<T> a 定义一个名为a的allocator对象,它可以为类型为T的对象分配内存 a.alloc ...
- iOS开发创建UI的耗时操作处理
项目中有网络请求.读写操作等一系列耗时操作时,为了避免阻塞主线程,我们会把这些耗时操作放到子线程中去处理,当处理完成后,再回到主线程更新UI,这样就不会阻塞主线程.但是创建UI的时候一般都是在主线程中 ...
- cp 拷贝
cp -a = cp -pdr p (preserve 保持) 复制时保持文件原有的属性(preserve) 模式 所有权 时间戳 d 连接文件 no dereference 复制时拷备连接文件的属 ...
- echarts修改上下左右的边距
grid: { top: '4%', left: '3%', right: '4%', ...