Я имел дело со вставкой, которая продолжает сбой с кодом ошибки 17004.
Я думал, что проблема была в том, что есть «выбор» внутри «вставки», но в Oracle SQL developer он работал,Код ошибки 17004 связан с проблемой нулевого значения, поэтому я также добавил jdbcType к каждому параметру, который я предоставляю, и все же он все еще не работает.
Это мой SQL-код для вставки, который завершился ошибкой с кодом ошибки 17004.
<insert id="registerNewPenalty" parameterType="TbAdhPenaltyTreatVO">
INSERT INTO
TB_ADH_PENALTYTREAT
VALUES (
(
SELECT
TO_CHAR(NVL(MAX(HISTNO), 0) + 1) AS MAXSEQ
FROM
TB_ADH_PENALTYTREAT
),
#{penaltytpcd, jdbcType=VARCHAR},
#{regdt, jdbcType=DATE},
#{occurdt, jdbcType=DATE},
#{runvioltpcd, jdbcType=DATE},
#{compid, jdbcType=INTEGER},
#{routeid, jdbcType=INTEGER},
#{busid, jdbcType=INTEGER},
'bmscenter',
NULL,
#{treat_detail, jdbcType=VARCHAR},
'0'
)
</insert>
И это мой TbAdhPenaltyTreatVO.
public class TbAdhPenaltyTreatVO {
private String histno; // NUMBER(10,0) Yes 1
private String penaltytpcd; // VARCHAR2(1 BYTE) Yes 2
private String regdt; // DATE Yes 3
private String occurdt; // DATE Yes 4
private String runvioltpcd; // VARCHAR2(2 BYTE) Yes 5
private String compid; // NUMBER(6,0) Yes 6
private String routeid; // NUMBER(9,0) Yes 7
private String busid; // NUMBER(9,0) Yes 8
private String treat_userid; // VARCHAR2(20 BYTE) Yes 9
private String treat_orgnm; // VARCHAR2(20 BYTE) Yes 10
private String treat_detail; // VARCHAR2(100 BYTE) Yes 11
private String treatyn; // VARCHAR2(1 BYTE) Yes 12
... getters and setters below
Запрос, который я ожидал и работал в Oracle SQL Developer, был:
INSERT INTO tb_adh_penaltytreat
VALUES (1,
'1',
SYSDATE,
To_date('2017/11/02 04:40:47', 'YYYY/MM/DD HH24:MI:SS'),
'13',
'164003',
'165000310',
'7012268',
'bmscenter',
NULL,
'......',
'0');
Для запроса насверху, запрос завершился с помощью журнала ниже:
[2019-01-29 16:03:17] DEBUG: org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
[2019-01-29 16:03:17] DEBUG: org.mybatis.spring.SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@777f6077]
[2019-01-29 16:03:17] DEBUG: org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [jdbc:oracle:thin:@10.10.10.20:1521:orcl, UserName=ICBIS_AGO, Oracle JDBC driver] will be managed by Spring
[2019-01-29 16:03:17] DEBUG: PENALTY.registerNewPenalty - ==> Preparing: INSERT INTO TB_ADH_PENALTYTREAT VALUES ( ( SELECT TO_CHAR(NVL(MAX(HISTNO), 0) + 1) AS MAXSEQ FROM TB_ADH_PENALTYTREAT ), ?, ?, ?, ?, ?, ?, ?, 'bmscenter', NULL, ?, '0' )
[2019-01-29 16:03:17] DEBUG: PENALTY.registerNewPenalty - ==> Parameters: 1(String), null, 2017-11-02 05:54:35.0(String), 13(String), 166012(String), 165000067(String), 7016047(String), this is for test.(String)
[2019-01-29 16:03:17] DEBUG: org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@777f6077]
Я не знаю, в чем проблема, но подозреваю, что это может быть проблема "выбора".Спасибо за прочтение.
ОБНОВЛЕНИЕ
Я изменил свой запрос следующим образом:
<insert id="registerNewPenalty" parameterType="TbAdhPenaltyTreatVO">
INSERT INTO
TB_ADH_PENALTYTREAT (
HISTNO,
PENALTYTPCD,
REGDT,
OCCURDT,
RUNVIOLTPCD,
COMPID,
ROUTEID,
BUSID,
TREAT_USERID,
TREAT_ORGNM,
TREAT_DETAIL,
TREATYN
)
VALUES (
(
SELECT
TO_CHAR(NVL(MAX(HISTNO), 0) + 1) AS MAXSEQ
FROM
TB_ADH_PENALTYTREAT
),
#{penaltytpcd, jdbcType=VARCHAR},
SYSDATE,
#{occurdt, jdbcType=DATE},
#{runvioltpcd, jdbcType=DATE},
#{compid, jdbcType=INTEGER},
#{routeid, jdbcType=INTEGER},
#{busid, jdbcType=INTEGER},
'bmscenter',
NULL,
#{treat_detail, jdbcType=VARCHAR},
'0'
)
</insert>
И запрос завершился этим журналом отладки:
[2019-01-30 09:15:47] DEBUG: org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
[2019-01-30 09:15:47] DEBUG: org.mybatis.spring.SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f587204]
[2019-01-30 09:15:47] DEBUG: org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [jdbc:oracle:thin:@10.10.10.20:1521:orcl, UserName=ICBIS_AGO, Oracle JDBC driver] will be managed by Spring
[2019-01-30 09:15:47] DEBUG: PENALTY.registerNewPenalty - ==> Preparing: INSERT INTO TB_ADH_PENALTYTREAT ( HISTNO, PENALTYTPCD, REGDT, OCCURDT, RUNVIOLTPCD, COMPID, ROUTEID, BUSID, TREAT_USERID, TREAT_ORGNM, TREAT_DETAIL, TREATYN ) VALUES ( ( SELECT TO_CHAR(NVL(MAX(HISTNO), 0) + 1) AS MAXSEQ FROM TB_ADH_PENALTYTREAT ), ?, SYSDATE, ?, ?, ?, ?, ?, 'bmscenter', NULL, ?, '0' )
[2019-01-30 09:15:47] DEBUG: PENALTY.registerNewPenalty - ==> Parameters: 1(String), 2017-11-02 05:54:35.0(String), 13(String), 166012(String), 165000067(String), 7016047(String), This data is for test.(String)
[2019-01-30 09:15:47] DEBUG: org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f587204]
[2019-01-30 09:15:47] DEBUG: org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator - Unable to translate SQLException with Error code '1861', will now try the fallback translator
[2019-01-30 09:15:47] DEBUG: org.springframework.jdbc.support.SQLStateSQLExceptionTranslator - Extracted SQL state class '22' from value '22008'
[2019-01-30 09:15:47] DEBUG: org.mybatis.spring.SqlSessionUtils - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f587204]
[2019-01-30 09:15:47] DEBUG: org.mybatis.spring.SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5f587204]
[2019-01-30 09:15:47] DEBUG: org.springframework.jdbc.datasource.DataSourceTransactionManager - Initiating transaction rollback
[2019-01-30 09:15:47] DEBUG: org.springframework.jdbc.datasource.DataSourceTransactionManager - Rolling back JDBC transaction on Connection [jdbc:oracle:thin:@10.10.10.20:1521:orcl, UserName=ICBIS_AGO, Oracle JDBC driver]
[2019-01-30 09:15:47] DEBUG: org.springframework.jdbc.datasource.DataSourceTransactionManager - Releasing JDBC Connection [jdbc:oracle:thin:@10.10.10.20:1521:orcl, UserName=ICBIS_AGO, Oracle JDBC driver] after transaction
[2019-01-30 09:15:47] DEBUG: org.springframework.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource
** 2-е ОБНОВЛЕНИЕ **
Я изменил #{occurdt, jdbcType=DATE}
на NULL, и вставка прошла успешно.Поэтому я думаю, что проблема заключается в #{occurdt, jdbcType=DATE}
.