代码之家  ›  专栏  ›  技术社区  ›  bwawok

使用select和参数执行DB2插入

  •  10
  • bwawok  · 技术社区  · 15 年前

    我想这样做:

    INSERT INTO TABLEA
    (
     COLUMN1, COLUMN2, COLUMN 3
    )
    SELECT FOOBAR, DOOBAR, ?
    FROM TABLEB
    

    simpleJdbcTemplate.update( mySqlFromAbove, someVariableToReplaceQuestionMark );
    

    这有可能吗?如果在构建SQL查询时用硬编码的值替换问号就可以了,但是我不想打开自己的SQL注入。。。


    我明白了

    这似乎表明

    4 回复  |  直到 15 年前
        1
  •  12
  •   Ian Bjorhovde    15 年前

    您需要输入cast参数标记,以便DB2知道需要什么。

    例如:

    INSERT INTO TABLEA
    (
     COLUMN1, COLUMN2, COLUMN 3
    )
    SELECT FOOBAR, DOOBAR, cast(? as int)
    FROM TABLEB
    

    显然,转换为适当的类型int只是一个例子。

        2
  •  2
  •   Community Mohan Dere    6 年前

    这是你的答案 DB2 SQL Message Reference

    SQL0418N型

    语句中使用了无效的参数标记。

    不能使用非类型化参数标记:

    • 在选择列表中
    • 作为日期时间算术运算的唯一参数
    • 在某些情况下作为标量函数的唯一参数

    • 不是事先准备好的陈述
    • 在CREATE VIEW语句的fullselect中
    • 在DB2 query Patroller捕获的查询中

    无法处理该语句。

    SQL代码:-418

    不幸的是,这并不能解决您的问题,因为您的SQL看起来很好。之后 Googling 更像是db2jdbc驱动程序根本不吃东西 INSERT INTO ... SELECT ... PreparedStatement . 目前还不清楚SQL消息引用中是否缺少了这一点,或者JDBC驱动程序中是否存在错误。

    推荐文章