10.10.5. 多发比对对外推送报告接口
10.10.5.1. 简介
多发比对提供了对外推送报告接口,用户可以通过在比对服务内配置http推送地址,比对服务在报告生成后会通过post方式将比对报告推送到用户指定的地址上,用户可以根据报告内容进行自定义处理。
10.10.5.2. 比对服务对外推送地址配置
可以通过比对服务配置项 comparison.compareResultPushUrl 来配置对外推送地址,具体可参考 比对服务通用配置
10.10.5.3. 请求方式
POST
10.10.5.4. Content-Type
application/json;charset=UTF-8
10.10.5.5. 接口推送请求体格式(json)
{
"traceId": "c2ce6908-e1b1-429d-b557-49b82cea5b9e",
"bizSql": "update XXXX0",
"state": "success",
"sqlType": "INSERT",
"sourceDatabase": "ORACLE",
"targetDatabases": [
"DM",
"GAUSSDB_ORACLE",
"LIGHTDB_ORACLE",
"OCEAN_BASE_ORACLE"
],
"transformSqls": [
"update XXXX1",
"update XXXX2",
"update XXXX3",
"update XXXX4"
],
"beforeSqls": [
"select XXXX1",
"select XXXX2",
"select XXXX3",
"select XXXX4"
],
"afterSqls": [
"select XXXX1",
"select XXXX2",
"select XXXX3",
"select XXXX4"
],
"appName": "hsbroker.fob",
"functionId": "fob.putNoticebkMod",
"sqlSequence": 1,
"sqlExecutionTime": "2025-02-21 14:22:28",
"beforeDiff": {
"columns": [
"EMP_ID",
"EMP_NAME",
"NEW_SALARY"
],
"rules": [
"NA",
"NA",
"NA"
],
"data": [
[{
"s": "Edward",
"t0": "Edward",
"t1": "Edward",
"t2": "Edwarda",
"t3": "Edward",
"diff": 0
},
{
"s": "Edward1",
"t0": "Edward0",
"t1": "Edward1",
"t2": "Edwarda1",
"t3": "Edward",
"diff": 0
}
]
]
},
"afterDiff": {
"columns": [
"EMP_ID",
"EMP_NAME",
"NEW_SALARY"
],
"rules": [
"NA",
"NA",
"NA"
],
"data": [
[{
"s": "Edward",
"t0": "Edward",
"t1": "Edward",
"t2": "Edwarda",
"t3": "Edward",
"diff": 0
},
{
"s": "Edward1",
"t0": "Edward0",
"t1": "Edward1",
"t2": "Edwarda1",
"t3": "Edward",
"diff": 0
}
]
]
},
"tableName": "dual",
"message": {
"GAUSSDB_ORACLE": "目标库执行异常的错误提示消息",
"DM": "达梦执行异常的错误消息,查询结果集可能为空"
}
}
10.10.5.5.1. 请求体字段说明
traceId:链路ID,由系统自动生成的UUID值或由外部传入
bizSql:业务SQL,参与多发比对的源库SQL语句
state:比对结果,取值范围为:
取值 |
说明 |
---|---|
SUCCESS |
多发比对成功 |
UNISQL_PARSE_FAIL |
多发比对过程中统一sql转换失败 |
DML2DQL_PARSE_FAIL |
多发比对过程中增、删、改SQL转查询语句失败 |
BIZ_SQL_EXECUTE_FAIL |
多发比对过程中业务SQL执行失败 |
MULTI_QUERY_FAI |
多发比对过程中结果集查询失败 |
COMPARE_FAIL |
多发比对过程中数据比对失败 |
sqlType:SQL类型,取值范围为:INSERT/UPDATE/DELETE/SELECT/REPLACE/MERGE等,根据支持情况会按需扩充
sourceDatabase:源数据库,参考 数据库支持范围
targetDatabases:目标数据库列表,参考 数据库支持范围
transformSqls:转换后信创库SQL集合,真多发场景下,由统一SQL转换而来;伪多发场景下,由业务手写而来
beforeSqls:每个目标库的前查询SQL集合,用于查询dml操作之前满足条件的数据;如果是查询语句的多发比对,则是业务SQL转换后的SQL。
afterSqls:每个目标库的后查询SQL集合,用于查询dml操作之后满足条件的数据
appName:应用名称
functionId:功能号
sqlSequence:SQL执行顺序,从1开始,表示业务SQL在同一个链路下的执行顺序
sqlExecutionTime:业务SQL执行时间
beforeDiff/afterDiff:前查询比对结果,如果本身是查询语句,也使用该字段
14.1 columns:查询结果集列名称
14.2 rules:比对时应用的比对规则信息
14.3 data:单个列的比对信息
14.3.1 s:源数据库列值
14.3.2 tX:某个目标库的列值,X从0,开始,对应targetDatabases中目标库的列值
14.3.3 diff:当前列整体是否和源库有差异,1有差异,0比对成功
14.3.4 tXdiff:某个目标库的列值是否和源库有差异,1有差异,0比对成功
tableName:业务SQL涉及的表
message:比对执行过程中的错误消息,key是数据库名称,参考 数据库支持范围 ,value是错误消息,多个库存在报错时,会有多个key出现。
约束关系:
targetDatabases 和 data 有关联,t0 表示 targetDatabases[0] 目标库的数据,t0diff表示该目标库制定列的比对结果,1为失败,0为成功
如果是查询SQL,则比对结果存储在beforeDiff,即afterDiff是空的
目标库执行报错情况下,beforeDiff/afterDiff 内部可能为空,且 message 中有对应的报错信息
tXdiff 规划中,先预留字段
10.10.5.5.2. 接口返回值建议格式
{
"code": 0,
"message": "错误消息"
}
字段说明:
code:状态码,0表示成功,非0表示失败
message:错误消息,code=0时,返回success,非0时,返回具体的报错消息
10.10.5.6. 推送示例
10.10.5.6.1. 包含前后比对结果的报告示例
{
"afterDiff": {
"columns": ["id", "name"],
"data": [
[{
"diff": 0,
"s": 1,
"t0": 1
}, {
"diff": 0,
"s": 1,
"t0": 1
}],
[{
"diff": 1,
"s": 1
}, {
"diff": 1,
"s": 1
}]
],
"rules": ["NA", "NA"]
},
"afterSqls": ["SELECT * FROM \"junit_test_insert_03_20_5\" WHERE \"id\"=1 AND \"name\"=1 ORDER BY \"id\""],
"appName": "appName",
"beforeDiff": {
"columns": ["id", "name"],
"data": [
[{
"diff": 0,
"s": 1,
"t0": 1
}, {
"diff": 0,
"s": 1,
"t0": 1
}],
[{
"diff": 1,
"s": 1
}, {
"diff": 1,
"s": 1
}]
],
"rules": ["NA", "NA"]
},
"beforeSqls": ["SELECT * FROM \"junit_test_insert_03_20_5\" WHERE \"id\"=1 AND \"name\"=1 ORDER BY \"id\""],
"bizSql": "insert into `junit_test_insert_03_20_5` (`id`,name) values (1,1)",
"sourceDatabase": "MYSQL",
"sqlExecutionTime": "2025-03-26 14:27:15",
"sqlSequence": 1,
"sqlType": "INSERT",
"state": "COMPARE_FAIL",
"tableName": "junit_test_insert_03_20_5",
"targetDatabases": ["LIGHTDB_MYSQL"],
"traceId": "7e3c3f9a71374710b9f124ff869ce9d8",
"transformSqls": ["INSERT INTO \"junit_test_insert_03_20_5\" (\"id\",\"name\") VALUES (1,1)"]
}
10.10.5.6.2. 包含错误信息的比对报告示例
{
"afterDiff": {
"columns": ["char_column", "varchar2_column", "number_column", "integer_column", "date_column", "varchar_column", "timestamp_column", "decimal_column"],
"data": [
[{
"diff": 0,
"s": "char_data ",
"t0": "char_data ",
"t1": "char_data "
}, {
"diff": 0,
"s": "varchar2_data",
"t0": "varchar2_data",
"t1": "varchar2_data"
}, {
"diff": 0,
"s": 12345,
"t0": 12345,
"t1": 12345
}, {
"diff": 0,
"s": 123,
"t0": 123,
"t1": 123
}, {
"diff": 0,
"s": "2023-01-01 00:00:00",
"t0": "2023-01-01 00:00:00",
"t1": "2023-01-01 00:00:00"
}, {
"diff": 0,
"s": "varchar_data",
"t0": "varchar_data",
"t1": "varchar_data"
}, {
"diff": 0,
"s": "2023-01-01 12:00:00",
"t0": "2023-01-01 12:00:00",
"t1": "2023-01-01 12:00:00.000000"
}, {
"diff": 0,
"s": 12345.67,
"t0": 12345.67,
"t1": 12345.67
}]
],
"message": {
"LIGHTDB_ORACLE": "业务SQL执行失败,业务SQL:INSERT INTO multi_tenant_test_2 (\n char_column,\n varchar2_column,\n number_column,\n integer_column,\n date_column,\n varchar_column,\n timestamp_column,\n decimal_column\n) VALUES (\n 'char_data ', \n 'varchar2_data', \n 12345, \n 123, \n TO_DATE('2023-01-01', 'YYYY-MM-DD'), \n 'varchar_data', \n TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), \n 12345.67\n) 异常信息:org.postgresql.util.PSQLException: ERROR: relation \"multi_tenant_test_2\" does not exist\n Position: 13\r\n\tat org.postgresql.core.v3.QueryExecutorImpl.ALLATORIxDEMO(uh:1951)\r\n\tat org.postgresql.core.v3.QueryExecutorImpl.processResults(uh:3078)\r\n\tat org.postgresql.core.v3.QueryExecutorImpl.execute(uh:294)\r\n\tat org.postgresql.jdbc.PgStatement.ALLATORIxDEMO(km:571)\r\n\tat org.postgresql.jdbc.PgStatement.execute(km:261)\r\n\tat org.postgresql.jdbc.PgStatement.executeWithFlags(km:411)\r\n\tat org.postgresql.jdbc.PgStatement.ALLATORIxDEMO(km:309)\r\n\tat org.postgresql.jdbc.PgStatement.executeWithFlags(km:280)\r\n\tat org.postgresql.jdbc.PgStatement.execute(km:352)\r\n\tat com.hundsun.lightdb.unisql.model.MultiplexContext.execute(MultiplexContext.java:597)\r\n\tat com.hundsun.lightdb.unisql.proxy.jdbc.UnisqlStatement.execute(UnisqlStatement.java:83)\r\n\tat com.hundsun.lightdb.unisql.model.MultiplexContext.executeMultiplex(MultiplexContext.java:653)\r\n\tat com.hundsun.lightdb.unisql.proxy.multijdbc.MultiStatement.execute(MultiStatement.java:284)\r\n\tat com.hundsun.lightdb.unisql.proxy.multijdbc.MultiStatement.executeUpdate(MultiStatement.java:80)\r\n\tat com.hundsun.lightdb.unisql.golang.MultiplexTest.multiplexPrepared(MultiplexTest.java:84)\r\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\r\n\tat org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)\r\n\tat org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:125)\r\n\tat org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:132)\r\n\tat org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:124)\r\n\tat org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:74)\r\n\tat org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)\r\n\tat org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:104)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:62)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:43)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:35)\r\n\tat org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)\r\n\tat org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)\r\n\tat org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:202)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:198)\r\n\tat org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)\r\n\tat org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)\r\n\tat org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)\r\n\tat java.base/java.util.ArrayList.forEach(ArrayList.java:1541)\r\n\tat org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)\r\n\tat org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)\r\n\tat java.base/java.util.ArrayList.forEach(ArrayList.java:1541)\r\n\tat org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)\r\n\tat org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)\r\n\tat org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)\r\n\tat org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)\r\n\tat org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)\r\n\tat com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71)\r\n\tat com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)\r\n\tat com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)\r\n\tat com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)\r\n"
},
"rules": ["NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"]
},
"afterSqls": ["SELECT * FROM multi_tenant_test_2 WHERE char_column='char_data ' AND varchar2_column='varchar2_data' AND number_column=12345 AND integer_column=123 AND date_column=TO_DATE('2023-01-01', 'YYYY-MM-DD') AND varchar_column='varchar_data' AND timestamp_column=TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS') AND decimal_column=12345.67 ORDER BY char_column", "SELECT * FROM multi_tenant_test_2 WHERE char_column='char_data ' AND varchar2_column='varchar2_data' AND number_column=12345 AND integer_column=123 AND date_column=TO_DATE('2023-01-01', 'YYYY-MM-DD') AND varchar_column='varchar_data' AND timestamp_column=TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS') AND decimal_column=12345.67 ORDER BY char_column", "SELECT * FROM multi_tenant_test_2 WHERE char_column='char_data ' AND varchar2_column='varchar2_data' AND number_column=12345 AND integer_column=123 AND date_column=TO_DATE('2023-01-01', 'YYYY-MM-DD') AND varchar_column='varchar_data' AND timestamp_column=TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS') AND decimal_column=12345.67 ORDER BY char_column"],
"appName": "appName",
"beforeDiff": {
"columns": ["char_column", "varchar2_column", "number_column", "integer_column", "date_column", "varchar_column", "timestamp_column", "decimal_column"],
"data": [
[{
"diff": 0,
"s": "char_data ",
"t0": "char_data ",
"t1": "char_data "
}, {
"diff": 0,
"s": "varchar2_data",
"t0": "varchar2_data",
"t1": "varchar2_data"
}, {
"diff": 0,
"s": 12345,
"t0": 12345,
"t1": 12345
}, {
"diff": 0,
"s": 123,
"t0": 123,
"t1": 123
}, {
"diff": 0,
"s": "2023-01-01 00:00:00",
"t0": "2023-01-01 00:00:00",
"t1": "2023-01-01 00:00:00"
}, {
"diff": 0,
"s": "varchar_data",
"t0": "varchar_data",
"t1": "varchar_data"
}, {
"diff": 1,
"s": "2023-01-01 12:00:00",
"t0": "2023-01-01 12:00:00",
"t1": "2023-01-01 12:00:00.000000"
}, {
"diff": 0,
"s": 12345.67,
"t0": 12345.67,
"t1": 12345.67
}]
],
"message": {
"LIGHTDB_ORACLE": "多发查询失败,多发查询SQL SELECT * FROM multi_tenant_test_2 WHERE char_column='char_data ' AND varchar2_column='varchar2_data' AND number_column=12345 AND integer_column=123 AND date_column=TO_DATE('2023-01-01', 'YYYY-MM-DD') AND varchar_column='varchar_data' AND timestamp_column=TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS') AND decimal_column=12345.67 ORDER BY char_column 错误消息org.postgresql.util.PSQLException: ERROR: relation \"multi_tenant_test_2\" does not exist\n Position: 15\r\n\tat org.postgresql.core.v3.QueryExecutorImpl.ALLATORIxDEMO(uh:1951)\r\n\tat org.postgresql.core.v3.QueryExecutorImpl.processResults(uh:3078)\r\n\tat org.postgresql.core.v3.QueryExecutorImpl.execute(uh:294)\r\n\tat org.postgresql.jdbc.PgStatement.ALLATORIxDEMO(km:571)\r\n\tat org.postgresql.jdbc.PgStatement.execute(km:261)\r\n\tat org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(bh:85)\r\n\tat org.postgresql.jdbc.PgPreparedStatement.executeQuery(bh:190)\r\n\tat com.hundsun.lightdb.unisql.utils.MultiJdbcUtils.doPreparedQuery(MultiJdbcUtils.java:139)\r\n\tat com.hundsun.lightdb.unisql.utils.MultiJdbcUtils.doPreparedQuery(MultiJdbcUtils.java:47)\r\n\tat com.hundsun.lightdb.unisql.model.MultiplexContext.doMultiBeforeQuery(MultiplexContext.java:872)\r\n\tat com.hundsun.lightdb.unisql.model.MultiplexContext.execute(MultiplexContext.java:589)\r\n\tat com.hundsun.lightdb.unisql.proxy.jdbc.UnisqlStatement.execute(UnisqlStatement.java:83)\r\n\tat com.hundsun.lightdb.unisql.model.MultiplexContext.executeMultiplex(MultiplexContext.java:653)\r\n\tat com.hundsun.lightdb.unisql.proxy.multijdbc.MultiStatement.execute(MultiStatement.java:284)\r\n\tat com.hundsun.lightdb.unisql.proxy.multijdbc.MultiStatement.executeUpdate(MultiStatement.java:80)\r\n\tat com.hundsun.lightdb.unisql.golang.MultiplexTest.multiplexPrepared(MultiplexTest.java:84)\r\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:566)\r\n\tat org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)\r\n\tat org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:125)\r\n\tat org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:132)\r\n\tat org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:124)\r\n\tat org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:74)\r\n\tat org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)\r\n\tat org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:104)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:62)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:43)\r\n\tat org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:35)\r\n\tat org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)\r\n\tat org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)\r\n\tat org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:202)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:198)\r\n\tat org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)\r\n\tat org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)\r\n\tat org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)\r\n\tat java.base/java.util.ArrayList.forEach(ArrayList.java:1541)\r\n\tat org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)\r\n\tat org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)\r\n\tat java.base/java.util.ArrayList.forEach(ArrayList.java:1541)\r\n\tat org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)\r\n\tat org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)\r\n\tat org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)\r\n\tat org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)\r\n\tat org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)\r\n\tat org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)\r\n\tat org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)\r\n\tat org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)\r\n\tat com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71)\r\n\tat com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)\r\n\tat com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)\r\n\tat com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)\r\n"
},
"rules": ["NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA"]
},
"beforeSqls": ["SELECT * FROM multi_tenant_test_2 WHERE char_column='char_data ' AND varchar2_column='varchar2_data' AND number_column=12345 AND integer_column=123 AND date_column=TO_DATE('2023-01-01', 'YYYY-MM-DD') AND varchar_column='varchar_data' AND timestamp_column=TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS') AND decimal_column=12345.67 ORDER BY char_column", "SELECT * FROM multi_tenant_test_2 WHERE char_column='char_data ' AND varchar2_column='varchar2_data' AND number_column=12345 AND integer_column=123 AND date_column=TO_DATE('2023-01-01', 'YYYY-MM-DD') AND varchar_column='varchar_data' AND timestamp_column=TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS') AND decimal_column=12345.67 ORDER BY char_column", "SELECT * FROM multi_tenant_test_2 WHERE char_column='char_data ' AND varchar2_column='varchar2_data' AND number_column=12345 AND integer_column=123 AND date_column=TO_DATE('2023-01-01', 'YYYY-MM-DD') AND varchar_column='varchar_data' AND timestamp_column=TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS') AND decimal_column=12345.67 ORDER BY char_column"],
"bizSql": "INSERT INTO multi_tenant_test_2 (\n char_column,\n varchar2_column,\n number_column,\n integer_column,\n date_column,\n varchar_column,\n timestamp_column,\n decimal_column\n) VALUES (\n 'char_data ', \n 'varchar2_data', \n 12345, \n 123, \n TO_DATE('2023-01-01', 'YYYY-MM-DD'), \n 'varchar_data', \n TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), \n 12345.67\n)",
"sourceDatabase": "ORACLE",
"sqlExecutionTime": "2025-03-26 14:59:55",
"sqlSequence": 1,
"sqlType": "INSERT",
"state": "BIZ_SQL_EXECUTE_FAIL",
"tableName": "multi_tenant_test_2",
"targetDatabases": ["GAUSSDB_ORACLE", "DM", "LIGHTDB_ORACLE"],
"traceId": "73b77122206f49c993a9e73fbda7c458",
"transformSqls": ["INSERT INTO multi_tenant_test_2 (char_column,varchar2_column,number_column,integer_column,date_column,varchar_column,timestamp_column,decimal_column) VALUES ('char_data ','varchar2_data',12345,123,TO_DATE('2023-01-01', 'YYYY-MM-DD'),'varchar_data',TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'),12345.67)", "INSERT INTO multi_tenant_test_2 (\n char_column,\n varchar2_column,\n number_column,\n integer_column,\n date_column,\n varchar_column,\n timestamp_column,\n decimal_column\n) VALUES (\n 'char_data ', \n 'varchar2_data', \n 12345, \n 123, \n TO_DATE('2023-01-01', 'YYYY-MM-DD'), \n 'varchar_data', \n TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'), \n 12345.67\n)", "INSERT INTO multi_tenant_test_2 (char_column,varchar2_column,number_column,integer_column,date_column,varchar_column,timestamp_column,decimal_column) VALUES ('char_data ','varchar2_data',12345,123,TO_DATE('2023-01-01', 'YYYY-MM-DD'),'varchar_data',TO_TIMESTAMP('2023-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS'),12345.67)"]
}