Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Oracle double quotes escaping in column aliases


Автор: rang3r 16.2.2012, 18:44
Всем доброго времени суток!
Подскажите пж-та в след. ситуации.
Есть запрос такого плана:
Код

select object_id, name as "SOME_RESOURCE",
-- query

Далее в коде SOME_RESOURCE заменяется на no columns_©ÜÄ左'"2</div>(здесь первая ' - single quotes, '' - double quotes)
В итоге запрос 
Код

select object_id, name as "no columns_©ÜÄ左'"2</div>",
--query

Этот запрос кидает ORA-00923: FROM keyword not found where expected
Попробовал сделать экранирование:
Код

select object_id, name as "no columns_©ÜÄ左''""2</div>",
--query

Пишет unimplemented feature. Вернее это на сокращенном (без no columns_).
Иначе кидает ORA-00972: identifier is too long (вылезаем за 30 символов).
Как можно решить эту проблему ? Может кто нибудь сталкивался ?
Заранее спасибо

Автор: Zloxa 16.2.2012, 19:48
http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements008.htm#i27570
Цитата

However, neither quoted nor nonquoted identifiers can contain double quotation marks or the null character (\0).

Автор: rang3r 16.2.2012, 22:49
Zloxa, спасибо за ссылку, но ответа на вопрос как экранировать я не нашел :(
Цитата


However, neither quoted nor nonquoted identifiers can contain double quotation marks or the null character (\0).

С английским у меня плохо,поэтому перевел в переводчике, вот что он мне выдал
Цитата

Тем не менее, ни цитаты, ни не заключенные в кавычки идентификаторы могут содержать двойные кавычки или нулевой символ (\ 0).

Я так понимаю предлагается убрать внешние ковычки ? 

Автор: Zloxa 17.2.2012, 09:38
Цитата(rang3r @  16.2.2012,  22:49 Найти цитируемый пост)
However, neither quoted nor nonquoted identifiers can contain double quotation marks or the null character (\0).

Цитата(rang3r @  16.2.2012,  22:49 Найти цитируемый пост)
Тем не менее, ни цитаты, ни не заключенные в кавычки идентификаторы могут содержать двойные кавычки или нулевой символ (\ 0).


Английский язык более близок формальной логике. Это по русски двойное отрицание не превращается в утвреждение. "Ничто не может быть..." не  эквивалентно "Что-то может быть...". В английском использование neither не требует дополнительного отрицания can, на русский же can в этом предложении правильно перевести "не могут".

Другими словами, здесь написано, что символ двойной кавычки в идентификаторах использовать нельзя. Наряду с символом null. Как для обернутых в кавычки идентификаторов, так и для не обернутых.

Ответ на ваш вопрос - никак.

Автор: rang3r 17.2.2012, 11:26
Цитата(Zloxa @ 17.2.2012,  09:38)
Ответ на ваш вопрос - никак.

Еще раз спасибо.
Собственно после экспериментов с алиасом, решил заменять double quoted symbol на 2 single-quote.
Пользователю при выводе будет не заметно.
Тема закрыта  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)