Ошибка ORA-00932.Не уверен, как исправить - PullRequest
1 голос
/ 02 ноября 2010

Я пытаюсь выполнить этот запрос Oracle ...

  SELECT COUNT(*) as total, 
         q1 
    FROM exit_responses 
   WHERE sdate BETWEEN '03-Aug-10 12:00:00 AM' AND '03-Nov-10 12:00:00 AM' 
GROUP BY q1;

... но я получаю эту ошибку ...

Error starting at line 3 in command:
SELECT COUNT(*) as total, q1 FROM exit_responses WHERE sdate BETWEEN '03-Aug-10 12:00:00 AM' AND '03-Nov-10 12:00:00 AM' GROUP BY q1 
Error at Command Line:3 Column:130
Error report:
SQL Error: ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

У кого-нибудь есть идеи? Говорит, что это несовместимый тип данных ... но я не совсем понимаю.

Спасибо

Кстати, вот DESC моей таблицы exit_responses:

DESC exit_responses
Name                           Null     Type                                                                                                                                                                                          
------------------------------ -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
SDATE                                   DATE                                                                                                                                                                                          
F_NAME                                  VARCHAR2(255 CHAR)                                                                                                                                                                            
L_NAME                                  VARCHAR2(255 CHAR)                                                                                                                                                                            
TITLE                                   VARCHAR2(255 CHAR)                                                                                                                                                                            
DEPARTMENT                              VARCHAR2(255 CHAR)                                                                                                                                                                            
EMP_TYPE                                VARCHAR2(11 CHAR)                                                                                                                                                                             
LENGTH_OF_SERVICE                       VARCHAR2(255 CHAR)                                                                                                                                                                            
Q1                                      CLOB()                                                                                                                                                                                        
Q2                                      CLOB()                                                                                                                                                                                        
Q2_OTHER                                CLOB()                                                                                                                                                                                        
Q3_PAY                                  NUMBER                                                                                                                                                                                        
Q3_HOLIDAYS                             NUMBER                                                                                                                                                                                        
Q3_VACATION                             NUMBER                                                                                                                                                                                        
Q3_SICK                                 NUMBER                                                                                                                                                                                        
Q3_INSURANCE                            NUMBER                                                                                                                                                                                        
Q3_RETIREMENT                           NUMBER                                                                                                                                                                                        
Q3_FSA                                  NUMBER                                                                                                                                                                                        
Q4_AVAILABILITY                         NUMBER                                                                                                                                                                                        
Q4_QUALITY                              NUMBER                                                                                                                                                                                        
Q4_SATISFACTION                         NUMBER                                                                                                                                                                                        
Q4_COMMENTS                             NUMBER                                                                                                                                                                                        
Q5_ORIENTATION                          NUMBER                                                                                                                                                                                        
Q5_POLICIES                             NUMBER                                                                                                                                                                                        
Q5_PROMOTIONAL                          NUMBER                                                                                                                                                                                        
Q6_JOBDUTIES                            NUMBER                                                                                                                                                                                        
Q6_RELATIONSHIPS                        NUMBER                                                                                                                                                                                        
Q6_COOPERATION                          NUMBER                                                                                                                                                                                        
Q6_EQUIPMENT                            NUMBER                                                                                                                                                                                        
Q6_CONDITIONS                           NUMBER                                                                                                                                                                                        
Q6_SAFETY                               NUMBER                                                                                                                                                                                        
Q7                                      NUMBER                                                                                                                                                                                        
Q8_KNOWLEDGE                            NUMBER                                                                                                                                                                                        
Q8_DELEGATION                           NUMBER                                                                                                                                                                                        
Q8_OBSERVANCE                           NUMBER                                                                                                                                                                                        
Q8_FEEDBACK                             NUMBER                                                                                                                                                                                        
Q8_CONTRIBUTIONS                        NUMBER                                                                                                                                                                                        
Q8_LISTENED                             NUMBER                                                                                                                                                                                        
Q8_COMPLAINTS                           NUMBER                                                                                                                                                                                        
Q9                                      VARCHAR2(3 CHAR)                                                                                                                                                                              
Q9_DESCRIBE                             CLOB()                                                                                                                                                                                        
Q10                                     CLOB()                                                                                                                                                                                        
Q11                                     NUMBER                                                                                                                                                                                        
Q11_COMMENTS                            CLOB()                                                                                                                                                                                        
Q12                                     NUMBER                                                                                                                                                                                        
Q12_DESCRIBE                            CLOB()                                                                                                                                                                                        
ADDITIONAL_COMMENTS                     CLOB() 

Ответы [ 5 ]

3 голосов
/ 02 ноября 2010

Предполагая, что тип даты sdate - Oracle DATE, используйте функцию TO_DATE для преобразования строки в DATE в Oracle:

  SELECT COUNT(*) as total, 
         q1 
    FROM exit_responses 
   WHERE sdate BETWEEN TO_DATE('03-Aug-10 12:00:00 AM', 'DD-MON-YY HH12:MI:SS AM') 
                   AND TO_DATE('03-Nov-10 12:00:00 AM', 'DD-MON-YY HH12:MI:SS AM') 
GROUP BY q1;
2 голосов
/ 02 ноября 2010

Какой тип данных столбца SDATE?Предполагая, что это DATE, вы почти наверняка захотите использовать явные вызовы TO_DATE для преобразования ваших строк в даты, то есть

WHERE sdate BETWEEN to_date('03-Aug-2010', 'DD-MON-YYYY') 
                AND to_date( '03-Nov-2010', 'DD-MON-YYYY' )

Поскольку полночь - это время по умолчанию, когда ничего не указано, вам необязательно12:00:00 утра немного.Если вы хотите включить это

WHERE sdate BETWEEN to_date('03-Aug-2010 12:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM') 
                AND to_date( '03-Nov-2010 12:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM' )

Если SDATE - это DATE, и вы хотите, чтобы BETWEEN брал две разные эпохи Unix (миллисекунды с 1 января 1970 года), а не строки, вам нужно что-то вроде

WHERE sdate BETWEEN date '1970-01-01' + :1/86400000  
                AND date '1970-01-01' + :2/86400000 

где: 1 и: 2 - две переменные связывания.Если ваши эпохи считаются секундами с 1 января 1970 года

WHERE sdate BETWEEN date '1970-01-01' + :1/86400  
                AND date '1970-01-01' + :2/86400 
1 голос
/ 02 ноября 2010

Ничего не зная об ORACLE, могу поспорить, что вы на самом деле не можете GROUP BY на CLOB полях. Это имеет смысл ...

Кроме того, посмотрите на это . Выдержки:

Это было важно с точки зрения Oracle, потому что вы не можете создать группу на сгустке. Для того, чтобы сделать группу по, вы должны иметь возможность сортировки, а поля-помехи не имеют естественного порядка сортировки. Обходной путь должен сделать функцию to_char над полем clob, но вы можете получить максимум 4000 символов. Для меня это соответствовало требованию, потому что нужная мне подстрока была маленькой строкой. Но проблема в том, что мне нужно было отсортировать часть тега XML внутри поля clob и сгруппировать их на основе этого. Мало того, что мне нужно было найти определенный тип ошибок в сообщении XML и посчитать их.

1 голос
/ 02 ноября 2010

я предполагаю, что sdate - это столбец DATE или DATETIME, в этом случае вам необходимо преобразовать строки даты:

  SELECT COUNT(*) as total,  
         q1  
    FROM exit_responses  
   WHERE sdate BETWEEN to_date('03-Aug-10 12:00:00 AM') AND to_date('03-Nov-10 12:00:00 AM')  
GROUP BY q1; 
0 голосов
/ 02 ноября 2010

Я думаю, для этого лучше использовать функцию to_date.

where sdate between
  TO_DATE('03.08.2010:00:00:0','DD.MM.YYYY:HH24:MI:SS') and TO_DATE('03.10.2010:00:00:0','DD.MM.YYYY:HH24:MI:SS') 
...