DB2 存储过程中执行动态SQL的两种写法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,样本代码:DROP PROCEDURE QUOTATION.COPY_SAMPLE;CREATE PROCEDURE QUOTATION.COPY_SAMPLE ( IN tableNameFr
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技有限公司
互联网巨头反垄断金融科技
互联网科技公司发展
平安科技 互联网
善班互联网科技
安徽鑫晟辉互联网科技
佩信高科技互联网
阿里互联网科技公司
互联网科技创新服务
互联网还是高科技吗
苏州五指互联网络科技有限
湖南一路畅行互联网科技
互联网科技大奖都有哪些公司
浙南科技城互联网大厦建设工程
互联网科技公司营业执照怎么办理
中国互联网有什么科技
宇信科技在杭州互联网排第几
互联网风格科技公司名称
恒生科技指数 中概互联网
山东蛋芒互联网科技有限公司
互联网科技活动banner
互联网科技资迅
兼蜜互联网科技
上游互联网科技
深圳艾佳互联网科技
科技互联网的估值
中国互联网有什么科技含量
互联网科技的全部知识
北京瑞云互联网科技有限公司
科技互联网企业在行动