DB2存储过程中如何在Load命令中使用输入参数ID
如何在DB2存储过程的LOAD命令中使用输入参数ID?
你的问题在于原代码里的SELECT ''ID''是把字符串常量'ID'写入Table_B,而非传入的参数ID的值。因为SYSPROC.ADMIN_CMD执行的是静态拼接的字符串命令,所以需要将参数值动态拼接到LOAD的SQL语句中。
基础实现方案
直接通过字符串拼接,将参数ID的值嵌入LOAD命令的SELECT子句中:
CREATE OR REPLACE PROCEDURE CP (IN ID VARCHAR(10)) LANGUAGE SQL SPECIFIC SQL220916104128256 BEGIN call SYSPROC.ADMIN_CMD( 'LOAD FROM (SELECT ''' || ID || ''', NAME, TYPE FROM TABLE_A) OF CURSOR INSERT INTO TABLE_B' ); END
这里的''' || ID || '''是核心逻辑:
- 存储过程中字符串内的单引号需要用两个单引号转义,所以
'''实际会在生成的LOAD命令中输出一个单引号 - 拼接后,参数ID的值会被单引号包裹,作为SELECT的第一个字段值写入Table_B
处理含单引号的参数值
如果参数ID可能包含单引号(比如O'Neil),直接拼接会导致SQL语法错误,需要先转义参数内的单引号:
CREATE OR REPLACE PROCEDURE CP (IN ID VARCHAR(10)) LANGUAGE SQL SPECIFIC SQL220916104128256 BEGIN call SYSPROC.ADMIN_CMD( 'LOAD FROM (SELECT ''' || REPLACE(ID, '''', '''''') || ''', NAME, TYPE FROM TABLE_A) OF CURSOR INSERT INTO TABLE_B' ); END
REPLACE(ID, '''', '''''')会把参数中的单个单引号替换为两个单引号,避免破坏LOAD命令的语法结构。
内容的提问来源于stack exchange,提问作者jeppa
相关产品推荐
相关产品推荐

