2015-01-05 2 views
0

Здравствуйте, я получаю очень странную ошибку: ORA-01861: literal не соответствует строке формата. Все мои поисковые запросы в Интернете связаны с проблемами DATE. Шахта просто для сохранения простой строки. Если вы видите проблему, сообщите мне, как ее исправить.GORM (varchar .save(), не DATE): ORA-01861: literal не соответствует строке формата

Колонна выпуска

TREND: VARCHAR2(31, CHAR), no constraints 

Подключенные в GORM по:

String trend 
... 
static constraints = { 
    trend(nullable: true, blank: true) 
... } ... 
static mapping = { 
    trend column: "TREND", sqlType: "varchar(31)" 
...} 

Выпуск Метод:

def fix_trend(){ 
    // There should ever only be three values found in the trend column 
    // of the Reports table: "TRENDING UP", "TRENDING STEADY", "TRENDING DOWN" 
    println "Running groovy database procedure : fix_trend" 
    StatusReport.list().each{ 
     String trend = it.trend 
     if (trend != 'TRENDING UP' && trend != 'TRENDING STEADY' && trend != 'TRENDING DOWN'){ 
      trend = trend?.toUpperCase() 
      if (trend == null){ 
       trend = 'TRENDING STEADY' 
      } 
      else if (trend.contains('UP')){ 
       trend = 'TRENDING UP'; 
      } 
      else if (trend.contains('DOWN')){ 
       trend = 'TRENDING DOWN'; 
      } 
      else{ 
       trend = 'TRENDING STEADY'; 
      } 
      it.trend = trend; 
      it.save(); 
     } 
    } 
    println "fix_trend completed" 
} 

Цель метода состоит в том, чтобы гарантировать, что все значения являются либо Trending UP, TRENDING DOWN или TRENDING STEADY.

StackTrace:

Running groovy database procedure : fix_trend 
fix_trend completed 
Error | 
2015-01-05 10:53:02,392 [http-bio-8080-exec-4] ERROR spi.SqlExceptionHelper - ORA-01861: literal does not match format string 
Error | 
2015-01-05 10:53:02,481 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver - SQLDataException occurred when processing request: [GET] /investigator/statusReports/selection 
ORA-01861: literal does not match format string 
. Stacktrace follows: 
Message: ORA-01861: literal does not match format string 
    Line | Method 
->> 439 | processError   in oracle.jdbc.driver.T4CTTIoer 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 395 | processError   in  '' 
| 802 | processError . . . . in oracle.jdbc.driver.T4C8Oall 
| 436 | receive    in oracle.jdbc.driver.T4CTTIfun 
| 186 | doRPC . . . . . . . in  '' 
| 521 | doOALL    in oracle.jdbc.driver.T4C8Oall 
| 205 | doOall8 . . . . . . in oracle.jdbc.driver.T4CPreparedStatement 
| 1008 | executeForRows  in  '' 
| 1307 | doExecuteWithTimeout in oracle.jdbc.driver.OracleStatement 
| 3449 | executeInternal  in oracle.jdbc.driver.OraclePreparedStatement 
| 3530 | executeUpdate . . . in  '' 
| 1350 | executeUpdate  in oracle.jdbc.driver.OraclePreparedStatementWrapper 
|  16 | selection . . . . . in investigator.StatusReportsController 
| 198 | doFilter    in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
|  63 | doFilter . . . . . . in grails.plugin.cache.web.filter.AbstractFilter 
| 1145 | runWorker   in java.util.concurrent.ThreadPoolExecutor 
| 615 | run . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
^ 745 | run     in java.lang.Thread 
+1

Убедитесь, что кодировка, которую вы используете для вставки значений, связана с дефолтом базы данных – roeygol

+0

Свойство NLS_CHARACTERSET моей базы данных - 'AL32UTF8'. Это ошибка кодирования? – hkievet

ответ

0

Я решил свой собственный вопрос.

В таблице было поле Date, которое было искажено как строка в классе Domain. Несмотря на то, что я пытался обновить поле VARCHAR2, метод domain_class.save() обновляет каждый атрибут этого домена_класса - поэтому ошибка не была связана с полем TREND, но с искаженным полем DATE.

Я понял это, добавив к DataSource.groovy

logSql = true 
formatSql = true 

и Config.groovy

log4j.main = { 
trace 'org.hibernate.type' 
debug 'org.hibernate.SQL' 
... 

Это показало, что оператор обновления порождена .save() пытается обновить каждый атрибут.

Надеюсь, что это поможет кому-то в будущем.

Смежные вопросы