我想插入示例'7000,21,00XYZ,ABC'的字符串,当我将其用作表中的插入时,我得到了上述错误,请帮助我解决DB2中的此问题。当我执行**INSERT INTO TABLE_NAME1(COLUMN1)(SELECT语句)**时,我可以插入此字符串但这不适用于Dynamic Sql。
rsl1atfo1#
可能是错误的动态sql使用。请考虑以下示例。
--#SET TERMINATOR @ SET SERVEROUTPUT ON@ BEGIN DECLARE V_STR VARCHAR (20) DEFAULT '7000,21,00XYZ, ABC'; DECLARE V_STMT VARCHAR (100); DECLARE V_CNT INT; -- Incorrect use of a string constant: -- SET V_STMT = 'SET ? = (SELECT COUNT (1) FROM (VALUES ' || V_STR || '))'; -- Correct use of a string constant: SET V_STMT = 'SET ? = (SELECT COUNT (1) FROM (VALUES ''' || V_STR || '''))'; CALL DBMS_OUTPUT.PUT_LINE (V_STMT); PREPARE S1 FROM V_STMT; EXECUTE S1 INTO V_CNT; CALL DBMS_OUTPUT.PUT_LINE ('CNT: ' || V_CNT); END@ SET SERVEROUTPUT OFF@
如果您忘记将字符串常量用单引号括起来,并构造了一个不正确的语句:
SET ? = (SELECT COUNT (1) FROM (VALUES 7000,21,00XYZ, ABC))
而不是正确的:
SET ? = (SELECT COUNT (1) FROM (VALUES '7000,21,00XYZ, ABC'))
然后会出现SQL0103N错误,如下所示:Db2假设VALUES 7000,21,00XYZ, ABC是一个包含一列和4个值的表,并且由于文字00XYZ从一个数字开始,因此它试图提供一个数字常量,当然这是无效的。
SQL0103N
VALUES 7000,21,00XYZ, ABC
00XYZ
1条答案
按热度按时间rsl1atfo1#
可能是错误的动态sql使用。
请考虑以下示例。
如果您忘记将字符串常量用单引号括起来,并构造了一个不正确的语句:
而不是正确的:
然后会出现
SQL0103N
错误,如下所示:Db2假设VALUES 7000,21,00XYZ, ABC
是一个包含一列和4个值的表,并且由于文字00XYZ
从一个数字开始,因此它试图提供一个数字常量,当然这是无效的。