当前位置: 首页 > 知识库问答 >
问题:

在DB2中使用带有选择的插入中的CURRENT时间

邬令
2023-03-14

我使用JDBC,使用insert select样式insert将一行插入到DB2数据库表中。我同时尝试使用CURRENTDATE从变量以及ENTRY_DATE插入动态数据:

INSERT INTO mytable (COL_A, COL_B, ENTRY_DATE)
SELECT COL_A, ?, CURRENT DATE FROM mytable
WHERE COL_A > 1;

我不熟悉sql和JDBC,所以我不知道使用<code>CURRENT DATE</code>是常见的,还是特定于我们的系统,但它可以在正常的插入中工作,如:

INSERT INTO mytable ENTRY_DATE values(CURRENT DATE);

我从未使用过insert-select风格的插入,所以我不知道错误是否出在我的“?”我使用PreparedStatement.setString或< code>CURRENT DATE参数插入它。但是,我得到以下错误:

[BEA][DB2 JDBC Driver][DB2]要准备的字符串包含参数标记的无效使用

我是否需要用一些东西包围其中一个或两个,以表明它们不是选择语句的一部分?我需要重新安排我的对账单吗?

编辑:

我无法向您展示我的确切代码,但这里有一个接近的近似值:

String sql = null;
PreparedStatement prepStmnt = null;
Connection conn = getConnection("database");
sql = "INSERT INTO MYTABLE ";
sql += "(COLUMN_A, COLUMN_B, ENTRY_DATE)";
sql += "SELECT COLUMN_A, ?, CURRENT DATE";
sql += "FROM MYTABLE WHERE COLUMN_A > 1;";
prepStmnt = conn.prepareStatement(sql);
prepStmnt.setString(1, myVar);
prepStmnt.execute();

共有3个答案

子车心思
2023-03-14

除非另有定义,否则DATE字段的默认值为CURRENT DATE。因此,您可以将其从您的声明中删除:

  INSERT INTO mytable
       ( COL_A, COL_B )
  SELECT COL_A, CAST(? AS CHAR(1))
      FROM mytable
      WHERE COL_A > 1;
杜元明
2023-03-14

错误消息涉及<code> 不到当前日期。也许这就是你想要的?

INSERT INTO mytable (COL_A, COL_B, ENTRY_DATE)
SELECT COL_A, NULL, CURRENT DATE FROM mytable
WHERE COL_A > 1;

在DB2中,<code>表示将为该位置传递一个参数。但这意味着你不能使用参数标记。所以删除<code>,它是参数标记。

狄新立
2023-03-14

我认为问题是DB2不知道你的参数在选择的列列表中,所以不知道选择将返回什么,所以它不能正确地准备语句。

试试这个:

INSERT INTO mytable (COL_A, COL_B, ENTRY_DATE)
SELECT COL_A, CAST(? AS CHAR(1)), CURRENT DATE FROM mytable
WHERE COL_A > 1;

CHAR(1) 替换为 COL_B 的正确数据类型。

 类似资料:
  • 问题内容: 我是Firebird的新手,我遇到了很多问题。我想在从另一个表中选择的表中插入各种行。 这是代码: ID应该从66开始自动递增。posid应该从1开始自动递增。 实际上,它没有插入任何内容。 我正在使用Firebird Maestro,并且刚刚打开了SQL脚本编辑器(在执行脚本时不会抛出任何错误消息)。 有谁能够帮我? 谢谢! 附加信息: 触发器应自动增加“ ID”列-但我不知道如何精

  • 问题内容: 我正在尝试向表中插入其他行,该表要求从另一个表中检索一个值。以下是查询示例: 表的结构为。 我知道以上查询是错误的。有没有办法在插入行时从其他表中检索1个值? 问题答案: 一些DBMS会接受以下内容,并在SELECT语句的周围加上括号:

  • 我目前正在验证一个在Oracle for DB2上开发的应用程序。因为我们不想维护两个独立的源,所以我需要一些查询来将blob插入到一个字段中,该字段在oracle和db2中都可以使用。我没有任何标识符来区分应用程序在哪个DB下运行。 我在oracle中使用,在DB2中使用,它们是互不兼容的。

  • 问题内容: 昨天我问了这个问题:如果在mysql中插入语句并且答案很好用。问题是,如果值不存在,我需要在表中插入一行。FE 我能怎么做?在互联网上我找不到答案:( 问题答案: 我假设您的表名为tbl。 纯粹是为了方便那些要求所有SELECT语句都应该包含FROM以及可能包含其他子句的人们。MySQL可能会忽略这些子句。如果没有引用表,MySQL不需要FROM DUAL。 如其他提到的那样,如果您的

  • 问题内容: 好的。简而言之,我正在尝试执行INSERT SELECT,例如: 当然,@key不会从每个插入中返回每个后续的LAST_INSERT_ID(),而是仅从最后一个插入返回ID。 基本上,我将旧的USER表拆分为ENTITY和USER,例如: 我为什么要这样做?基本上,我有一个“商店”实体,它将具有“用户”公用的字段,例如地址和电话号码。因此,任何“ ENTITY”都可能没有多个地址(送货