当前位置: 首页 > article >正文

gbase8s存储过程一些隐藏的错误写法

在某项目现场使用存储过程返回结果集时最后一条数据会重复一次

比如应该返回  1,2,3,4,5 实际返回 1,2,3,4,5,5

写法如下

CREATE PROCEDURE p14(v_rq int)
returning   varchar(5000) AS stationname;
define global v1_stationname varchar(50) default null;
define execsql  varchar(1000);
let execsql = "SELECT tabname from systables where tabid<"||v_rq;
prepare stmt FROM execsql;
declare c1 cursor for stmt; 
open c1;
while(SQLCODE != 100)
fetch c1 into v1_stationname; 
return v1_stationname with resume;
end while; 
END PROCEDURE;

问题出现在while 循环中

当游标处于最后一条记录时满足 sqlcode !=100 ,然后还会再次进入 while 循环中 ,导致最后一条数据会重复一次,因为是先return  再退出循环,所以需要在 return 前就退出循环

修改如下

drop PROCEDURE p14;
CREATE PROCEDURE p14(v_rq int)
returning   varchar(5000) AS stationname;
define  v1_stationname varchar(50) ;
define execsql  varchar(1000);
let execsql = "SELECT tabname from systables where tabid<"||v_rq;
prepare stmt FROM execsql;
declare c1 cursor for stmt; 
open c1;
while(1=1)
fetch c1 into v1_stationname; 
if SQLCODE = 100 then exit;
end if;
return v1_stationname with resume;
end while; 
close c1;
END PROCEDURE;


http://www.kler.cn/a/311574.html

相关文章:

  • MySQL如何利用索引优化ORDER BY排序语句
  • 智慧仓储物流可视化平台
  • C++容器面试题及参考答案
  • openai Realtime API (实时语音)
  • C#强大的应用场景和优势
  • 蓝桥杯备考——算法
  • docker镜像源
  • info 命令:查看命令手册
  • 案例分析-Stream List 中取出值最大的前 5 个和最小的 5 个值
  • 动态内存
  • 7.Java高级编程 多线程
  • flutter Dio发送post请求
  • Linux: debug:内核log有乱码^@^@
  • Redis——分布式锁
  • JVM 虚拟机的编译器、类加载过程、类加载器有哪些?
  • Paragon NTFS for Mac和Tuxera NTFS for Mac,那么两种工具有什么区别呢?
  • python中的排序函数sorted
  • 波分技术基础 -- MS-OTN介绍
  • AIGC论文查重是什么?
  • 【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL23
  • C++笔记21•C++11的新特性•
  • Springboot请求响应案例
  • Ruoyi Cloud K8s 部署
  • Golang | Leetcode Golang题解之第415题字符串相加
  • MySQL:索引02——使用索引
  • kafka 超详细的消息订阅与消息消费几种方式