2012-06-19 2 views
3

В Moodle 2 Установка работает на DB2, удаление пользователя неудачна, возвращая ошибку чтения из базы данных:Существующий столбец DB2 сообщается как не столбец таблицы

Debug информация: [IBM ] [Драйвер CLI] [DB2/LINUXX8664] SQL0206N «USERIDFROM» недопустим в том контексте, в котором он используется. SQLSTATE = 42703 SQLCODE = -206 SELECT * FROM mdl_message WHERE useridfrom =? ORDER BY timecreated
[массив ( 0 => '28521', )]

Описание ошибки для SQL0206N ясна, но useridfrom является колонна mdl_message:

$ db2 describe table mdl_message 

          Data type      Column 
Column name    schema Data type name  Length  Scale Nulls 
------------------------- --------- ------------------- ---------- ----- ------ 
 ID      SYSIBM BIGINT      8  0 No  
 USERIDFROM    SYSIBM BIGINT      8  0 No  
 USERIDTO     SYSIBM BIGINT      8  0 No  
 SUBJECT     SYSIBM VARCHAR     200  0 Yes 
 FULLMESSAGE    SYSIBM VARCHAR     200  0 Yes 
 FULLMESSAGEFORMAT  SYSIBM SMALLINT      2  0 Yes 
 FULLMESSAGEHTML   SYSIBM VARCHAR     100  0 Yes 
 SMALLMESSAGE    SYSIBM VARCHAR     200  0 Yes 
 NOTIFICATION    SYSIBM SMALLINT      2  0 Yes 
 CONTEXTURL    SYSIBM VARCHAR     200  0 Yes 
 CONTEXTURLNAME   SYSIBM VARCHAR     200  0 Yes 
 TIMECREATED    SYSIBM BIGINT      8  0 No  

    12 record(s) selected. 

Что еще может вызвать эту ошибку?

+1

Из сообщения об ошибке, которое вы получаете, непонятно, что используется предложение WHERE. Вы забыли положить его? – Kreg

+0

Это странная ошибка, есть ли триггер на столе или что-то в этом роде? Или есть способ отключить чувствительность к регистру? И не случайно «1» (один) или «l' (ell) или подобный? Кроме того, я предполагаю, что 'TIMECREATED' - это количество миллисекунд (или nano) секунд с эпохи в UTC - чтобы обойти тот факт, что DB2 не хранит информацию о часовом поясе в метках времени? –

+0

На основании сообщения об ошибке похоже, что вы передали знак вопроса в DB2 для USERIDFROM вместо большого целого. –

ответ

6

Возможно, имя столбца каким-то образом заполнило пробел. Вы можете использовать этот запрос, чтобы узнать, есть ли отставая пробел:

db2 "select '<' || name || '>' from sysibm.syscolumns where tbname = 'MDL_MESSAGE'" 
+1

Хорошая уловка: '', спасибо! –

+0

Один быстрый вопрос, когда я проверяю столбцы из «sysibm.syscolumns», он дает мне столбцы, но я не могу видеть этот столбец, когда я делаю «select * from t_name», это подмножество столбцов, показанных в приведенных выше столбцах sysibm , Можете ли вы мольбы помочь мне понять, почему в колонках есть вариации? –

0

Вы уверены, что вы подключаетесь как же пользователем из командной строки и CLI. Может быть случай, когда в одной таблице присутствует другая схема, и вы видите описание другой таблицы, но доступ к другой.

+0

Да, это то же самое –