apache / shardingsphere

Distributed SQL transaction & query engine for data sharding, scaling, encryption, and more - on any database.
Apache License 2.0
19.88k stars 6.73k forks source link

Cannot batch insert in Oracle #15689

Open onevroad opened 2 years ago

onevroad commented 2 years ago

Bug Report

When i use the sharding-jdbc to batch insert sql in Oracle ,it gives me a exception. But MySQL is OK.

Which version of ShardingSphere did you use?

sharding 5.1.0 java 1.8

Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?

ShardingSphere-JDBC

Expected behavior

Actual behavior

My sql is: INSERT ALL INTO demo_sharding ( id,name,content,remark,creator_id,create_time,updator_id,update_time,flag ) VALUES ( ?,?,?,?,?,?,?,?,? ) SELECT 1 FROM DUAL

the Exception is :

### Error updating database.  Cause: java.lang.NullPointerException
### The error may involve demo.data.mapper.DemoShardingMapper.insertBatch-Inline
### The error occurred while setting parameters
### SQL: INSERT ALL     INTO  demo_sharding   ( id,name,content,remark,creator_id,create_time,updator_id,update_time,flag )   VALUES  ( ?,?,?,?,?,?,?,?,? )    SELECT 1 FROM DUAL
### Cause: java.lang.NullPointerException
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:200)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
    ... 7 more
Caused by: java.lang.NullPointerException
    at org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext.<init>(InsertStatementContext.java:82)
    at org.apache.shardingsphere.infra.binder.SQLStatementContextFactory.getDMLStatementContext(SQLStatementContextFactory.java:142)
    at org.apache.shardingsphere.infra.binder.SQLStatementContextFactory.newInstance(SQLStatementContextFactory.java:116)
    at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.createLogicSQL(ShardingSpherePreparedStatement.java:438)
    at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.execute(ShardingSpherePreparedStatement.java:331)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
    at com.sun.proxy.$Proxy257.update(Unknown Source)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
    ... 13 more
onevroad commented 2 years ago

Is there any way to fix it?

strongduanmu commented 2 years ago

@onevroad Thank you for your feedback, we will fix this bug.

strongduanmu commented 2 years ago

Can you show your sharding configuration?

onevroad commented 2 years ago
spring.shardingsphere.datasource.names=ds0,ds1

spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=oracle.jdbc.OracleDriver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.shardingsphere.datasource.ds0.username=demo
spring.shardingsphere.datasource.ds0.password=123456

spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=oracle.jdbc.OracleDriver
spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:oracle:thin:@127.0.0.1:1522:orcl
spring.shardingsphere.datasource.ds1.username=demo
spring.shardingsphere.datasource.ds1.password=123456

spring.shardingsphere.rules.readwrite-splitting.data-sources.ds.type=Static
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds.props.write-data-source-name=ds0
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds.props.read-data-source-names=ds1
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds.load-balancer-name=round-robin
spring.shardingsphere.rules.readwrite-splitting.load-balancers.round-robin.type=ROUND_ROBIN
cheese8 commented 2 years ago

I will take a look.

strongduanmu commented 2 years ago

Hi @cheese8 Can this issue be done in 5.1.3?

cheese8 commented 2 years ago

Hi @cheese8 Can this issue be done in 5.1.3?

Sorry, quite busy recently, maybe 5.1.4

github-actions[bot] commented 2 years ago

Hello , this issue has not received a reply for several days. This issue is supposed to be closed.

RaigorJiang commented 1 year ago

Hi @cheese8 , Is there an update?

amorxxf commented 7 months ago

Hi @cheese8 , 5.4.1 has same problem, has this issue been done?