日期:2014-05-16  浏览次数:20362 次

db2出现DUAL的错误
刚学用db2,在做保存操作时出现以下异常:
SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException: --- The error occurred in bc/tbm/project/model/ProjectDetail.db2.xml. --- The error occurred while applying a parameter map. --- Check the ProjectDetail.getNewProjectId-InlineParameterMap. --- Check the statement (query failed). --- Cause: com.ibm.db2.jcc.b.nm: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2INST1.DUAL, DRIVER=3.50.152

解决方法是:执行一下   CREATE ALIAS DUAL FOR SYSIBM.SYSDUMMY1;  问题就解决了。

以下为转载内容:

DB2中类似于ORACLE中的DUAL表的表

问题 在ORACLE中,数据库用户可以通过访问DUAL表获取一些系统信息,例如:
'SELECT SYSDATE FROM DUAL'命令返回当前系统日期
SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
----------
18-12-03

'SELECT 1 + 1 FROM DUAL'执行数学运算
SQL> SELECT 1 + 1 FROM DUAL;

1+1
----------
2

'SELECT MY_SEQUENCE.NEXTVAL FROM DUAL'得到序列值
SQL> SELECT MY_SEQUENCE.NEXTVAL FROM DUAL;

NEXTVAL
----------
2

在DB2中,是否有对应的表?

解答 是的,DB2中存在一个对于的表:SYSIBM.SYSDUMMY1

用户可以通过访问这个表获取相应的信息。

例如:
'SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1' 命令返回当前系统日期

db2 => SELECT CURRENT DATE FROM SYSIBM.SYSDUMMY1

1
----------
2003-12-18

1 条记录已选择。

'SELECT 1+1 FROM SYSIBM.SYSDUMMY1' 执行数学运算
db2 => SELECT 1+1 FROM SYSIBM.SYSDUMMY1

1
-----------
          2

1 条记录已选择。

'SELECT NEXTVAL FOR MYSEQ FROM SYSIBM.SYSDUMMY1' 得到序列值
db2 => SELECT NEXTVAL FOR MYSEQ FROM SYSIBM.SYSDUMMY1

1
-----------
          3

1 条记录已选择。

此外,在DB2中,用户还可以用VALUES语句查询上面的值。

例如:
db2 => VALUES CURRENT DATE

1
----------
2003-12-18

1 条记录已选择