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 ...
随机推荐
- win10无法保存代理服务器设置
问题说明 通过Internet设置->链接->局域网设置->代理服务设置,填写完地址后点选"确定"无反应,关闭窗口后重新打开'局域网设置',数据全无. 通过 开始 ...
- 搭建docker swarm集群
环境介绍 管理节点 swarm01 192.168.5.140 工作节点 swarm02 192.168.5.141 管理节点执行 docker swarm init --advertise ...
- 【Android 逆向】【攻防世界】easy-dex
这一题不easy,不知为何叫这个名字.... 1. apk 安装到手机,不知所云,各种亮瞎眼闪光 2. jadx 打开apk,一行java代码都没有,打开AndroidManifest看看 <? ...
- Windows Docker Destop修改默认镜像文件位置
0.首先关闭docker destop. 1.通过Everything或者资源管理器找到以.vhdx结尾的文件所在的位置,这些就是docker镜像路径 2.我的路径:C:\Users\Administ ...
- django中信号
# 信号的理解 在某个行为进行的某个阶段给这个行为添加一个附带的行为 # 相关api ## 数据表 pre_init # django的model执行其构造方法前,自动触发 post_init # d ...
- 【LeetCode二叉树#12】合并二叉树(巩固层序遍历)
合并二叉树 力扣题目链接(opens new window) 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果 ...
- 链接服务器导致SQL Server停止响应
概要 如果多个实例中同时存在数据源为对方实例的链接服务器,并且开启了"分发服务器"的属性,您可能会遇到这种情况. 1 现象 14:31时,在SSMS中检查HIS实例是否有复制订阅时 ...
- String对象和String常量池
1. String的基本特性 String:字符串,使用一对 "" 引起来表示 String s1 = "mogublog" ; // 字面量的定义方式 Str ...
- Java 练习题 5岁的狗按人的年龄计算的话,前两年每一年是人的 10.5岁,之后每一年 * 增加4岁。如果5岁的狗、相当于人的多少年龄 * 10.5 + 10.5 + 4 +4 +4=33岁
1 /*** 2 * 练习题 3 * 5岁的狗按人的年龄计算的话,前两年每一年是人的 10.5岁,之后每一年 4 * 增加4岁.如果5岁的狗.相当于人的多少年龄 5 * 10.5 + 10.5 + 4 ...
- Codeforces Round 260 (Div. 1)A. Boredom(dp)
最开始写了一发贪心wa了,然后这种选和不选的组合优化问题,一般是考虑动态规划 \(dp[i][0]:\)表示第i个数不选的最大值 \(dp[i][1]:\)表示第i个数选的最大值 考虑转移: \(dp ...