DB2 存储过程中执行动态SQL的两种写法
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,样本代码:DROP PROCEDURE QUOTATION.COPY_SAMPLE;CREATE PROCEDURE QUOTATION.COPY_SAMPLE ( IN tableNameFr
千家信息网最后更新 2025年11月11日DB2 存储过程中执行动态SQL的两种写法
样本代码:
DROP PROCEDURE QUOTATION.COPY_SAMPLE;CREATE PROCEDURE QUOTATION.COPY_SAMPLE ( IN tableNameFrom VARCHAR(30) , IN tableNameTo VARCHAR(30) , INOUT copyResult INTEGER)BEGIN DECLARE SQLCODE INTEGER DEFAULT 0; SET copyResult = 0; -- Proecss 1 BEGIN DECLARE 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: LOOP FETCH 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 2 BEGIN -- ...... END; SET copyResult = 1;END;注意点:
1、SQLCODE必须要定义,且必须定义在最外层的BEGIN的下面。
2、必须要判断SQLCODE是否等于100,等于100时退出CURSORLOOP,否则会死循环。
3、"OPEN curs"之后不要忘记"CURSORLOOP:"。
代码
外层
样本
循环
写法
动态
过程
存储
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
全国人大网络安全法
校园网络安全解决方法
校史馆分布式服务器
利用网络技术控制手机
dede 数据库词典
ni无法连接到许可证服务器
淘宝买服务器管理登录
外卖系统数据库思路
ec服务器自定义跑酷
数据库自动重复计算
哈尔滨一诺互联网信息科技
网络安全的定义分类及风险
派出所如何处置网络安全事件
江苏税控盘服务器设置云空间
浙江一站式软件开发销售电话
软件开发 以后能干啥
营销网络安全治理
我的世界人间彼岸服务器
华为 网络技术工程师 分配
信息科网络安全责任
sql测试数据库连接出错
杭州三维管理软件开发
简单概括网络安全现状
检察机关网络安全责任制度
acm如何输入多组数据库
浙江正规软件开发价格
网络地址和服务器地址一样吗
医保数据库操作
专业网络技术服务好处
主播解说手机版服务器生存