db2 SQL0103数值文字“00XAB”无效SQLSTATE = 42604

xe55xuns  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(191)

我想插入示例'7000,21,00XYZ,ABC'的字符串,当我将其用作表中的插入时,我得到了上述错误,请帮助我解决DB2中的此问题。当我执行**INSERT INTO TABLE_NAME1(COLUMN1)(SELECT语句)**时,我可以插入此字符串
但这不适用于Dynamic Sql。

rsl1atfo

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从一个数字开始,因此它试图提供一个数字常量,当然这是无效的。

相关问题