DB2 存储过程中执行动态SQL的两种写法
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,样本代码:DROP PROCEDURE QUOTATION.COPY_SAMPLE;CREATE PROCEDURE QUOTATION.COPY_SAMPLE ( IN tableNameFr
千家信息网最后更新 2025年01月22日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安全错误
数据库的锁怎样保障安全
mysql数据库只读
测试中数据库重要吗
上海软件开发公司电商
.mdf数据库工具
服务器崩溃三次
c h2数据库连接
具有网络安全的数字货币概念股
wow 轮回服务器
数据库系统概论 第4版)
关于网络安全教育建议书
网络技术专利哪个公司强
淮安软件开发技术项目实训中心
南邮数据库和网络技术
滨州库存管理软件开发公司
容器技术软件开发要不要学习
网络安全主题地铁车厢
全面排查网络安全风险
网络安全绿色阅读文明上网手抄报
网络安全 自身安全
软件开发都需要什么基础
ipad 用于软件开发
无线局域网络网络技术
软件开发构架师
郴州湘南网络技术学校校长
软件开发工作室怎么接单
网络安全费用8%
山东在线审批管控软件开发平台
手机软件开发需要会哪些
和兴镇网络安全
网络安全工作协调领导小组