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

Posted

技术标签:

【中文标题】SQL0103 数字文字“00XAB”无效 SQLSTATE = 42604【英文标题】:SQL0103 The numeric literal "00XAB" is not valid SQLSTATE = 42604 【发布时间】:2021-10-23 14:46:49 【问题描述】:

我想插入字符串,例如 '7000,21,00XYZ, ABC' 当我将其用作表中的插入时,我收到上述错误,请帮助我解决 DB2 的问题。 当我这样做时,我可以插入这个 插入 TABLE_NAME1(COLUMN1) (SELECT 语句)

但这不适用于动态 Sql。

【问题讨论】:

显示真正的插入语句,显示目标列 Db2 数据类型,还显示完整的纯文本错误消息,包括任何附加的数字或代码。提及您的 Db2 数据库的代码页以及 Db2 平台(z/os、i 系列、linux/unix/windows/cloud)。 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

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

【讨论】:

以上是关于SQL0103 数字文字“00XAB”无效 SQLSTATE = 42604的主要内容,如果未能解决你的问题,请参考以下文章

sql语句中如何将字符类型转换成数字类型?

错误:数字类型 (SQL) 的输入语法无效

SQL语句一直报无效数字的错,为啥?

Oracle报错ORA-01722: 无效数字排查解决方案

oracle SQL Developer 显示数字数据类型为空,而 Length 函数显示 ORA-01722:无效数字

java.sql.SQLSyntaxErrorException-ORA-01722:无效数字 - 准备好的语句