DB2 存储过程中执行动态SQL的两种写法
样本代码:
DROP PROCEDURE QUOTATION.COPY_SAMPLE;
CREATE PROCEDURE QUOTATION.COPY_SAMPLE (IN tableNameFrom VARCHAR(30), IN tableNameTo VARCHAR(30), INOUT copyResult INTEGER)BEGINDECLARE SQLCODE INTEGER DEFAULT 0;SET copyResult = 0;-- Proecss 1BEGINDECLARE fromSql VARCHAR(32672);DECLARE toSql VARCHAR(32672);DECLARE seqTo VARCHAR(30);DECLARE templateParserId INTEGER;DECLARE uuid VARCHAR(36);DECLARE stmt STATEMENT;DECLARE curs CURSOR FOR stmt;SET seqTo = 'SEQ_' || tableNameTo;SET fromSql = 'SELECT MAX(TEMPLATE_PARSER_ID), UUID FROM QUOTATION.' || tableNameFrom || ' GROUP BY UUID';PREPARE stmt FROM fromSql;OPEN curs;CURSORLOOP:LOOPFETCH curs INTO templateParserId, uuid;-- Do nothing if no data or processed all datas.IF SQLCODE = 100 THEN LEAVE CURSORLOOP;END IF;SET uuid = (SELECT CONCAT(HEX(RAND()), HEX(RAND())) FROM SYSIBM.SYSDUMMY1);SET toSql = 'INSERT INTO QUOTATION.' || tableNameTo || ' (TEMPLATE_PARSER_ID, UUID) VALUES (NEXTVAL FOR QUOTATION.' || seqTo || ',''' || uuid || ''')';PREPARE s FROM toSql;EXECUTE s;END LOOP;CLOSE curs;END;-- Proecss 2BEGIN-- ......END;SET copyResult = 1;
END;
注意点:
1、SQLCODE必须要定义,且必须定义在最外层的BEGIN的下面。
2、必须要判断SQLCODE是否等于100,等于100时退出CURSORLOOP,否则会死循环。
3、“OPEN curs”之后不要忘记“CURSORLOOP:”。
转载于:https://blog.51cto.com/13685327/2146247
DB2 存储过程中执行动态SQL的两种写法相关推荐
- 在Oracle中执行动态SQL的几种方法------转载
在Oracle中执行动态SQL的几种方法 在一般的sql操作中,sql语句基本上都是固定的,如: SELECT t.empno,t.ename FROM scott.emp t WHERE t.de ...
- 存储过程中执行动态Sql语句
MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...
- mysql 存储过程 表名_MySql存储过程中执行动态SQL(表名是变量)
项目中要显示每个表的记录条数,但是因为数据库中的索引表中(infomation_schema.tables)记录的每个表的数据条数不是那么实时(超过3w多就不准了),所以要手动持久化一下再显示,持久化 ...
- 怎么在oracle里执行sql语句,在Oracle中执行动态SQL的几种方法
在一般的sql操作中,sql语句基本上都是固定的,如: SELECT t.empno,t.ename FROM scott.emp t WHERE t.deptno = 20; 但有的时候,从应用的需 ...
- oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数
oracle中有没有可动态执行sql语句的函数 关注:233 答案:2 手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...
- 在存储过程中构建动态SQL
目录 介绍 sp_executesql与EXECUTE命令 例1.0 例1.1 存储过程中的动态SQL 例2.0 在动态SQL中使用Like操作符,IN操作符和Order By 例3.0 - 使用LI ...
- 在.NET中执行Async/Await的两种错误方法
微信公众号:架构师高级俱乐部 关注可了解更多的编程,架构知识.问题或建议,请公众号留言; 如果你觉得此文对你有帮助,欢迎转发 在.NET中执行异步/等待的两种错误方法 在应用开发中,我们为了提高应用程 ...
- oracle 动态执行ddl语句,Oracle过程中执行动态SQL或DDL语句
如果你用的是 Oracle 8i 及以上的版本,那简单,在过程中用 execute immediate sql_str 就行, sql_str 是一个拼凑的 SQL 语句, 如果你用的是 Oracle ...
- spring中AOP动态代理的两种方式
AOP动态代理的两种方式 Spring AOP动态代理的方式(spring的AOP默认是JDK Proxy) 浅谈这两种动态代理 JDK的动态代理,需要有实现接口 动态代理--JDK Proxy ⚫ ...
最新文章
- MySQL + JSON = 王炸!!
- linux吃鸡游戏下载,沙雕糖豆人吃鸡战场
- Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)...
- 5-2 决策树算法预测销量高低代码
- CocosCreator2.1.0渲染流程与shader
- Eclipse 安装配置总结(WST WTP)(转)
- ssl1335-最佳派对【二分图,最大匹配,图论】
- [渝粤题库]西北工业大学复变函数与积分变换
- cropper基本用法
- linux xargs命令
- 修改远程桌面服务器里的密码
- v-ray 5.0 渲染器参数说明
- FIT2CLOUD飞致云旗下开源项目DataEase成功进入GitHub趋势榜主榜
- origin指数拟合
- java类加载器分类_Java类加载器特点的具体介绍
- 月圆之夜-体验报告(完稿时间2021/6/11)
- 【STM32H7】第4章 ThreadX FileX文件系统移植到STM32H7(SD卡)
- 2:Alibaba微服务组件Nacos注册中心
- CAS-搭建CAS Server服务端(静态认证)
- js实现点击查看大图功能
热门文章
- Python eval 与 exec 函数 - Python零基础入门教程
- linux划分5t硬盘,关于磁盘分区(以linux系统为例)
- form表单图片预览 layui_layui 实现图片上传和预览
- oracle undo管理机制,Oracle UNDO数据概念和管理
- oracle非常量不能用于privot_Oracle 行列转换函数pivot、unpivot的使用(二)
- java double 的精度_Java Double的精度问题
- 树展示 移动端_百度移动端开始用网站品牌名代替网址显示
- java返回特定下标元素_java基础--输出数组中指定元素的下标
- java 随机 数字 字母组合_java生成随机数字和字母组合
- 学校门口的树C语言算法,C语言校园导游程序设计汇报.doc