刚学用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 条记录已选择
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 条记录已选择