Невозможно обновить столбец в таблице Oracle 10g с именем "НАЗНАЧЕНИЕ" - PullRequest
0 голосов
/ 24 февраля 2011

Попытка обновить таблицу oracle 10g с использованием asp.net и коннектора oracleclient

Вот синтаксис sql:

UPDATE tableX set PURPOSE = 'T' where REQUEST_ID = '2543'

Это выдает ошибку:

ORA-00904: "PURPOSE": invalid identifier

Если я пытаюсь обновить другой столбец

UPDATE tableX set DELIVERY_COMMENTS = 'T' where REQUEST_ID = '2543'

все отлично работает.

Столбец НАЗНАЧЕНИЕ существует, и я могу вставить информацию в столбец НАЗНАЧЕНИЕ.

У кого-нибудь есть идеи, почему это не работает?

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Хорошо ... вот ответ

ОШИБКА ОПЕРАТОРА

Я подключался к базе данных как user2, что помещало меня в схему user2. Схема user2 имеет представление с использованием user1.target_table с именем user2.target_table. Проблема была в том, что вид был настроен как

«Выбрать field1, field2 из user1.target_table»

Новое поле было добавлено в user1.target_table, но представление в схеме user2 не было обновлено, чтобы отразить это изменение.

Я обнаружил ошибку, указав оператор UPDATE в

ОБНОВЛЕНИЕ user1.target_table set PURPOSE = 'T', где field1 = '1'

оператор обновления работал как чемпион.

Извлеченный урок ..... не создавайте представление в одной схеме с именем, которое используется в другой схеме.

Надеюсь, это проясняет мой PEBKAC (существует проблема между клавиатурой и стулом)

1 голос
/ 24 февраля 2011

Я не думаю, что ЦЕЛЬ - это восстановленное слово, но если это так, оно должно быть заключено в двойные кавычки "set "PURPOSE" = 'T'.

Имя столбца может быть строчным или смешанным. Выполните select * from tableX where rownum < 2 и посмотрите, чтоSqlPlus говорит, что имя столбца - это. Определенный способ определить регистр имени столбца:

select c.owner, c.column_id, c.column_name from all_tab_cols c where c.table_name = 'TABLEX' order by c.owner, c.column_id

Обратите внимание, что «TABLEX» - это все заглавные буквы.так что Oracle обрабатывает это с учетом регистра.

...