KingabseES 隐式游标属性值(SQL%attribute)
隐式游标介绍
Oracle数据库迁移到KingbaseES数据库,不需要将源PL/SQL脚本,大规模修改为KES语法,因为KingbaseES支持大部分PLSQL语法。
1、隐式游标
隐式游标是由 PL/SQL 构造和管理的会话游标。
每次运行 SELECT 或 DML 语句时,PL/SQL 都会打开一个隐式游标。您无法控制隐式游标,但可以从其属性中获取信息。
隐式游标属性值的语法是 SQL%attribute,SQL%attribute 总是指向最近运行的 SELECT 或 DML 语句。 如果没有运行这样的语句,则 SQL%attribute 的值为 NULL。隐式游标在其关联语句运行后关闭。但是,在另一个 SELECT 或 DML 语句运行之前,它的属性值仍然可用。最近运行的SELECT或DML语句可能在不同的范围内。要保存属性值以供以后使用,请立即将其分配给局部变量。 否则,其他操作(例如子程序调用)可能会在您测试之前更改属性的值。
2、隐式游标属性值的用途
隐式游标属性是:
- SQL%ISOPEN 属性:游标是否打开?
- SQL%FOUND 属性:是否有任何行受到影响?
- SQL%NOTFOUND 属性:没有行受到影响?
- SQL%ROWCOUNT 属性:有多少行受到影响?
3、简单例子
--SQL%attribute的值,可以获得最新一条DQL和DML语句的运行信息
do language plsql
$$
declare
i int;
begin delete from oo02 where rownum <= 0;
DBMS_OUTPUT.PUT('staSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || sql % ISOPEN || ',' || sql % found || ',' || sql % notfound);
GET DIAGNOSTICS i := row_count;
DBMS_OUTPUT.PUT_LINE('staSQL : ' || i);
DBMS_OUTPUT.PUT_LINE(' '); delete from oo02 where rownum <= 10;
DBMS_OUTPUT.PUT('staSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || sql % ISOPEN || ',' || sql % found || ',' || sql % notfound);
GET DIAGNOSTICS i := row_count;
DBMS_OUTPUT.PUT_LINE('staSQL : ' || i);
DBMS_OUTPUT.PUT_LINE(' '); end;
$$; ANONYMOUS BLOCK
staSQL : 0,false,false,true
staSQL : 0 staSQL : 10,false,true,false
staSQL : 10
二、KingbaseES 隐式游标属性值的不能获得动态SQL的执行信息
1、Oracle 场景
在Oracle数据库的PLSQL语句中,动态SQL语句的执行信息,也可以通过隐式游标属性获取。
begin
execute immediate 'delete from sch01.TT01 where rownum <= 10';
DBMS_OUTPUT.PUT('dynSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || (case when sql % ISOPEN then 'true' else 'false' end) || ',' ||
(case when sql % found then 'true' else 'false' end) || ',' ||
(case when sql % notfound then 'true' else 'false' end)); execute immediate 'delete from sch01.TT01 where rownum <= 0';
DBMS_OUTPUT.PUT('dynSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || (case when sql % ISOPEN then 'true' else 'false' end) || ',' ||
(case when sql % found then 'true' else 'false' end) || ',' ||
(case when sql % notfound then 'true' else 'false' end));
rollback;
end; dynSQL : 10,false,true,false
dynSQL : 0,false,false,true
2、KingbaseES 场景
在KingbaseES数据库的language PLSQL的语句中,动态SQL语句的执行信息,隐式游标属性不被赋值,仍然保留上一次的数值。
do language plsql
$$
declare
i int;
begin execute ' delete from oo02 where rownum <= :rn ' using 20;
DBMS_OUTPUT.PUT('dynSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || sql % ISOPEN || ',' || sql % found || ',' || sql % notfound);
GET DIAGNOSTICS i := row_count;
DBMS_OUTPUT.PUT_LINE('dynSQL : ' || i);
DBMS_OUTPUT.PUT_LINE(' '); delete from oo02 where rownum <= 0;
DBMS_OUTPUT.PUT('staSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || sql % ISOPEN || ',' || sql % found || ',' || sql % notfound);
GET DIAGNOSTICS i := row_count;
DBMS_OUTPUT.PUT_LINE('staSQL : ' || i);
DBMS_OUTPUT.PUT_LINE(' '); execute ' delete from oo02 where rownum <= :rn ' using 20;
DBMS_OUTPUT.PUT('dynSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || sql % ISOPEN || ',' || sql % found || ',' || sql % notfound);
GET DIAGNOSTICS i := row_count;
DBMS_OUTPUT.PUT_LINE('dynSQL : ' || i);
DBMS_OUTPUT.PUT_LINE(' '); delete from oo02 where rownum <= 10;
DBMS_OUTPUT.PUT('staSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || sql % ISOPEN || ',' || sql % found || ',' || sql % notfound);
GET DIAGNOSTICS i := row_count;
DBMS_OUTPUT.PUT_LINE('staSQL : ' || i);
DBMS_OUTPUT.PUT_LINE(' '); execute ' delete from oo02 where rownum <= :rn ' using 20;
DBMS_OUTPUT.PUT('dynSQL : ');
DBMS_OUTPUT.PUT_LINE(sql % rowcount || ',' || sql % ISOPEN || ',' || sql % found || ',' || sql % notfound);
GET DIAGNOSTICS i := row_count;
DBMS_OUTPUT.PUT_LINE('dynSQL : ' || i);
DBMS_OUTPUT.PUT_LINE(' '); rollback;
end;
$$;
ANONYMOUS BLOCK
dynSQL :
dynSQL : 20 staSQL : 0,false,false,true
staSQL : 0 dynSQL : 0,false,false,true
dynSQL : 20 staSQL : 10,false,true,false staSQL : 10 dynSQL : 10,false,true,false
dynSQL : 20
KingabseES 隐式游标属性值(SQL%attribute)的更多相关文章
- PL/SQL -->隐式游标(SQL%FOUND)
PL/SQL -->隐式游标(SQL%FOUND) 分类: SQL/PLSQL 基础2010-12-22 16:23 4084人阅读 评论(0) 收藏 举报 sqlexceptionoracle ...
- PL/SQL — 隐式游标
一.隐式游标的定义及其属性 定义 隐式游标由系统自动定义,非显示定义游标的DML语句即被赋予隐式游标属性.其过程由oracle控制,完全自动化.隐式游标的名称是SQL,不能对SQL游标显式地执行OPE ...
- Oracle pl/sql 显示游标和隐式游标
显示游标 一.定义语法: CURSOR <游标名> IS <SELECT 语句> [FOR UPDATE | FOR UPDATE ...
- oracle的隐式游标
游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- Oracle游标cursor1基础和隐式游标
--指向表行的指针,一次一行,一般向前移动 Resultset --游标永远代代表的是一行数据. /* 使用步骤 第一步:声明游标,就像是声明一个变量样. 游标的关键字就是cursor. Declar ...
- ORACLE的显式游标与隐式游标
1)查询返回单行记录时→隐式游标: 2)查询返回多行记录并逐行进行处理时→显式游标 显式游标例子: DECLARE CURSOR CUR_EMP IS SELECT * FROM EMP; ROW_E ...
- Oracle异常处理内容,隐式游标
异常处理 create or replace procedure pr_test3(v_bh in varchar2,v_xx out t_hq_ryxx%rowtype) is begin sele ...
- Oracle 隐式游标 存储过程
--隐式游标 注意变量赋值用(:=) 连接符用(||)而不是加号(+) DECLARE v_pk T_PLAT_KEYWORD.ID%TYPE; --主键 v_amount_message T_PLA ...
- ms sql 根据表名查询 表中所有字段的属性值 sql语句
SELECT表名=case when a.colorder=1 then d.name else '' end,--表说明=case when a.colorder=1 then isnull(f.v ...
随机推荐
- 我的小程序之旅九:微信开放平台unionId机制介绍
一.机制说明 参考文档:https://developers.weixin.qq.com/minigame/dev/guide/open-ability/union-id.html 如果开发者拥有多个 ...
- CSS之浮动Float
前言 提到浮动,前端的小伙伴肯定都不陌生,但是随着弹性布局等等一些更好用的标准出来后,用在布局方面少了很多,当初我刚开始接触前端的时候,很习惯用浮动来给元素改变定位,当时还并不是很流行flexbox布 ...
- Python输出日志信息
在Python中要输出日志信息有2种方式: 1.调用内置的print()方法,该方式只能将信息输出到控制台 2.使用logging模块将日志信息输出到文件中(logging模块默认也是输出到控制台:标 ...
- ThreadLocal的应用场景和注意事项有哪些?
https://cloud.tencent.com/developer/article/1618405
- Elasticsearch下载安装配置
下载地址 # elasticsearch https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-3 # kibana ...
- 第135篇:Three.js基础入门
好家伙,这东西太帅了,我要学会 先放张帅图(都是用three.js做出来的,这我学习动力直接拉满) 还有另外一个 Junni is... 帧数太高,录不了 开始学习 官方文档 1.Thr ...
- 【Azure 环境】微软云上主机,服务的安全更新疑问
[问题一]微软云上的虚拟机,不论是Windows系统or Linux 系统,系统的安全补丁是由微软云平台 打上补丁进行修复,还是使用虚拟机的用户手动更新修复呢? [答]这些补丁不会由平台来直接操作 ...
- 十: SQL执行流程
SQL执行流程 1. MySQL 中的 SQL执行流程 MySQL的查询流程: 1.1 查询缓存 Server 如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端:如果没 有,就进入 ...
- 因IPv4和IPv6协议不同而引发的第三方接口调用失效的问题
记录一次因IPv4和IPv6协议不同而引发的第三方接口调用失效的问题,仅供大家参考!!! 背景介绍 公司有一个微信小程序,我做后端的,负责给小程序提供数据接口.后来因为一系列原因小程序要对接一个中控( ...
- spingboot打造教育平台(谷粒学院课程笔记)
第一单fqb 申明,项目的框架技术架构,前端运行时node 后端框架spring 开发前准备:mysbatis官网随时看文档,IDEa 202编释器2 环境配置,idea配置一下mavem路 ...