2015-10-12 87 views
0

我有一個包含許多INSERT語句的SQL腳本,我通過Liquibase Maven update目標執行該語句。 一些INSERT語句中包含日期,就像下面的語句Oracle JDBC驅動程序ORA-01843:無效的月份錯誤

Insert into T (date) values (to_date('16-JAN-12','DD-MON-RR')) 

當我運行Liquibase update目標,我收到以下錯誤

SEVERE 12/10/15 15.46: liquibase: install.xml: migrations/install/data/data.xml::1::gdm: Change Set migrations/install/data/data.xml::1::gdm failed. Error: ORA-01843: not a valid month 
[Failed SQL: Insert into T (date) values (to_date('16-JAN-12','DD-MON-RR'))] 
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:316) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55) 
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:122) 
    at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1247) 
    at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1230) 
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:548) 
    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:51) 
    at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73) 
    at liquibase.Liquibase.update(Liquibase.java:210) 
    at liquibase.Liquibase.update(Liquibase.java:190) 
    at liquibase.Liquibase.update(Liquibase.java:325) 
    at org.liquibase.maven.plugins.LiquibaseUpdate.doUpdate(LiquibaseUpdate.java:33) 
    at org.liquibase.maven.plugins.AbstractLiquibaseUpdateMojo.performLiquibaseTask(AbstractLiquibaseUpdateMojo.java:30) 
    at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:394) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 
    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:497) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: java.sql.SQLDataException: ORA-01843: not a valid month 

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) 
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017) 
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655) 
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249) 
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566) 
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:202) 
    at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:45) 
    at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:933) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1075) 
    at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1718) 
    at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1678) 
    at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:332) 
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:314) 
    ... 35 more 

在網上,我發現,這是關於一個錯誤NLS_LANG必須在客戶端和服務器(Oracle DB)上設置的變量,但這兩個平臺似乎都以EN語言運行。

你有沒有經歷過這樣的問題?可能是什麼問題?

謝謝
朱利奧

回答

0

用途:

Insert into T (date) values (to_date('16-01-2012','DD-MM-RRRR')); 

安全得多。該月的數字對於指定的語言int session NLS_PARAMETER不變。年份數字也使用全部4位數字。

Insert into T (date) 
values(to_date('16-JAN-2012','DD-MON-RRRR', 'NLS_DATE_LANGUAGE=American')); 

如果你堅持月份名稱,你可以明確定義領土。

+0

我無法編輯該腳本,該腳本與 – gvdm

+1

一樣,因此您必須在執行腳本之前執行'alter session set nls _...'。 – ibre5041

+0

我認爲這是對我而言唯一正確的答案。 – gvdm

相關問題