- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在读取 Oracle 中的一个表并将整个转储插入到 Db2 中。表结构相同。我正在使用执行上述任务的简单 scala 类。我已将 insert batchsize 设置为 300。更新几批后,该类抛出以下异常
com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: Error for batch element #10: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;PME.TM_ASSET_LQA_DETL, DRIVER=4.13.127
at com.ibm.db2.jcc.am.id.a(id.java:673) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.am.id.a(id.java:60) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.am.id.a(id.java:127) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.t4.cb.a(cb.java:481) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.t4.cb.a(cb.java:70) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.t4.q.a(q.java:57) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.t4.tb.a(tb.java:225) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.am.oo.a(oo.java:3434) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.am.oo.d(oo.java:5550) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.am.oo.a(oo.java:4992) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.am.oo.c(oo.java:4664) ~[db2jcc-4.13.127.jar:na]
at com.ibm.db2.jcc.am.oo.executeBatch(oo.java:2934) ~[db2jcc-4.13.127.jar:na]
at com.baml.regw.db.replicator.ReplicationRunnable$$anonfun$run$3.apply(SimpleReplicator.scala:105) ~[regw-db-replicator-0.0.933-SNAPSHOT.jar:na]
at com.baml.regw.db.replicator.ReplicationRunnable$$anonfun$run$3.apply(SimpleReplicator.scala:80) ~[regw-db-replicator-0.0.933-SNAPSHOT.jar:na]
由于异常与 IntegrityConstraint 有关,我尝试检查复合主键 (ID+TimeStamp+9999-12-31 00.00.000000) 是否存在,但该组合既不存在于 Oracle 表中,也不存在于 Db2 表中。对 Db2 表的约束是
COLUMN NAME UNIQUE RULE
+ID+BUSINESS_STOP+BUSINESS_START Primary
+ID Duplicate
+BUSINESS_START Duplicate
+LOW_QUALITY_IND Duplicate
+IDENTIFIER1 Duplicate
+IDENTIFIER2 Duplicate
我在 SO 中搜索了其他此类问题,但没有一个修复对我有用。执行此任务的代码
logger.info("Retrieving based on query string: " + queryStr + " for thread " + threadNum)
val start = System.currentTimeMillis()
val rs = stmt.executeQuery(queryStr)
val rsMd = rs.getMetaData()
val end = System.currentTimeMillis()
logger.info("Query execution time: " + (end - start) + "ms.")
done = true
var stmtCount = 0
Iterator.continually(rs).takeWhile(_.next()).foreach { rs =>
if (sourceConf.hasPath("blockSize")) {
done = false
}
//Subtract one to ignore the timestamp field that we are using
for (idx <- 1 to (rsMd.getColumnCount()-extraColumnCount)) {
try {
logger.info("destStmt.setObject"+rs.getObject(idx)+" column Type "+ rsMd.getColumnType(idx))
destStmt.setObject(idx, rs.getObject(idx), rsMd.getColumnType(idx))
}
catch {
case e:Exception => {
logger.warn("While attempting to set (1-based) index: " + idx +
" to value of type " + {if(rs.getObject(idx) != null) rs.getObject(idx).getClass().getName() else "[NULL]"} +
" received error: " + e.getMessage())
throw e
}
}
}
destStmt.addBatch()
stmtCount += 1
if(stmtCount % { if (destConf.hasPath("batchSize")) destConf.getInt("batchSize") else 200 } == 0) {
destStmt.executeBatch()
destDbConn.commit()
destStmt.clearBatch()
stmtCount = 0
}
}
if(stmtCount > 0) {
destStmt.executeBatch()
destDbConn.commit()
destStmt.clearBatch()
}
rs.close()
stmt.close()
最佳答案
检查源数据库 (Oracle) 中是否真的存在相同的完整性约束。否则,您可能会导入源表中存在的行(因为没有约束),但无法导入目标表中。
从 JDBC 的角度检查两个表(Oracle 和 DB2)中的列索引是否真的相同。其他工具可能按列名等排序。更好的是:使用列名(遍历元数据中的列名)。您的基于索引的方法将不起作用,如果列被重新排序(这可能发生),如果列被删除并重新添加等。例如,如果您有一个 select * from x
和一个 insert into x values(...)
列顺序是相关的。
检查源表中属于约束的列中是否有 null
值。 Oracle 处理约束中的 null
值的方式可能与 DB2 不同,如果它由索引支持的话。
关于java - Db2 .SqlIntegrityConstraintViolationException : SQLCODE=-803, SQLSTATE=23505,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28826508/
env file:环境文件: APP_ENV=localAPP_DEBUG=trueAPP_KEY= ...........DB_HOST=srv3.linuxisrael.co.ilDB_D
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我在这里有一个 plpgsql 函数来指示在 ANALYZE 期间是否引发了任何警告: CREATE OR REPLACE FUNCTION analyzeWarning() RETURNS inte
我创建了一个过程,如果输入等于 0,该过程将抛出 SQLException 并显示错误消息“dwa”。 CREATE PROCEDURE enter_the_dragon(test INT) BEGI
我在尝试通过 8443 门户连接到我的服务器时收到此错误: ERROR: Zend_Db_Adapter_Exception: SQLSTATE[HY000] [2002] No such file
在插入投票之前,我需要检查每个用户的声誉数。因此,为了这个目的,我有一个像这样的TRIGGER: CREATE TRIGGER check_reputation BEFORE INSERT ON vo
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error oraccess violation: 1064 You have
MYSQL 在处理通过别名调用的表的子查询时触发 SQLSTATE[42S02] 错误 “更新 call_log AS c1 INNER JOIN call_log AS c2 ON c1.id =
我在 PostgreSQL (mixbest) 中有一个包含 73018 行的表。我要选择的字段是: sample integer m integer, pciv double prec
我刚刚收到此错误...请帮我解决这个错误! www.sp-power.com Error in file: "/home/sppower6/public_html/app/code/core/Mage
例如,我有产品[香蕉]和产品[橙色],我希望这两个产品在数据库中使用相同的图片。但是,当我尝试添加与第一个产品具有相同图片的第二个产品时,我收到此错误: SQLSTATE[23000]: Integr
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 7 年前。 编辑问题以包含 desired behavior, a specific problem
Closed. This question is off-topic。它当前不接受答案。
运行时: DELIMITER $$ CREATE TRIGGER tr_test BEFORE UPDATE ON test FOR EACH ROW BEGIN
我的代码大部分已经运行起来了。我似乎不断地一遍又一遍地犯同样的错误。我认为这是因为我在错误的地方放了逗号,但我不知道。谁能帮我看一下这段代码吗? setAttribute(PDO::ATTR_ERRM
我正在尝试获取我的 yii 应用程序的时间范围。 这是我的模型: public function timeRange($attribute, $params) { $criteria
prepare($sql); foreach($parameters as $name=>$value){ $query->bindValue($name,$value);
我有一个前触发器,它可以防止数据更新到表中。为此,我使用了“SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'This operation is not allo
您好,我在 SQL 查询中遇到错误,无法弄清楚问题出在哪里。这是到目前为止在 Barmar 的帮助下的查询。 $query = "SELECT c.*, count(s.curso_id) as c
我构建了 restful API 及其工作,但是当我尝试将参数传递给链接时,下面显示错误,尽管当我打印参数时结果是正确的! 详细信息 Type: PDOException Code: 42000 Me
我是一名优秀的程序员,十分优秀!