PDA

Показать полную графическую версию : кодировка названия столбца


Arenear
20-08-2016, 20:11
Доброго времени суток!

Решил я разобраться в Оракл и появилась проблема.
Задача: вывести запросом строку и назвать столбец столбец на кириллице. название содержит 28 символов.

select 'Hi world' as ОченьДинноеНазваниеСтолбца from dual;
появляется ошибка ORA-00972: identifier is too long

Сложность в том, что название столбца имеет тип varchar2(30). Кодировка по умолчанию (как я понимаю) utf8. таким образом английскими символами максимальная длина названия столбца 30 символов. А русскими - всего 15.

convert('ОченьДинноеНазваниеСтолбца','UTF8','CL8KOI8R') - вернет строку, а не идентификатор и появится ошибка

select'Hi world' as convert('ОченьДинноеНазваниеСтолбца','UTF8','CL8KOI8R') from dual;
ORA-00923: FROM keyword not found where expected

Возможно ли изменить кодировку идентификатора прямо в запросе с utf8 на koi8r?
Как вообще можно выполнить задачу?

lxa85
20-08-2016, 20:21
Arenear, Вопрос "нафига"?
Еще более прозрачно - зачем мешать кириллицу и латиницу в запросе?
select 'Hi world' as ОченьДинноеНазваниеСтолбца from dual; »
Вернет столбец 'Hi World' у вас есть такой столбец?

P.S. Если вы решили разобраться с Ораклом, так и разбирайтесь родным и правильным инструментарием (как он там назывался, я забыл).
Зачем вы изобретаете велосипед, который вероятно методами Оракла не решается, а решается бизнес-приложением?

Arenear
20-08-2016, 20:43
lxa85, разбираюсь с Ораклом. Записался на курсы. Преподаватель дал задание. Найти готовое решение в интернете не могу. Поэтому пишу здесь, может кто подскажет как это сделать.

lxa85
20-08-2016, 21:24
Arenear, приведите полное и не искаженное задание.
Структуру таблицы, и ее данные.
oracle sql developer
в помощь
Так же покажите настройки базы данных (свойства).

Arenear
20-08-2016, 21:58
lxa85,

Создать таблицу “Clients”, содержащую столбцы “client_id (integer, not null)” и “client_name (varchar2(50) , not null)”. Заполнить её произвольными данными (10-20 записей).

Создать таблицу “Phones”, содержащую столбцы “client_id (integer, not null)”, “phone_number (integer, not null)”, “active_from (date, not null)” , “active_to (date)”. Заполнить её произвольными данными (10-20 записей).

Создать таблицу “Mobiles”, содержащую столбцы “client_id (integer, not null)”, “mobile_number (integer, not null)”, “active_from (date, not null)” , “active_to (date)”. Заполнить её произвольными данными (10-20 записей).

Создать таблицу “Emails”, содержащую столбцы “client_id (integer, not null)”, “email (varchar2(50), not null)”. Заполнить её произвольными данными (10-20 записей).

Поле “active_to (date)” может принимать значение null.

В таблицах “Phones”, “Mobiles” и “Emails” поле client_id является FK из “Clients”.

Используя SET операторы:
Вывести имя клиента и все контактные данные клиента в формате:

“ФИО” “Название контактного данного” “Его значение” “Дата с” “Дата до”
“Иванов И.И.” “Мобильный” “89082222222” “01.01.2015” “null”
“Иванов И.И.” “email” “ivanov.ii@mail.ru” “null” “null”

Вывести всех клиентов (только ФИО), у которых есть домашний номер (“Phones”), но нет мобильного (“Mobiles”) и нет email’a (“Emails”).

Вывести всех клиентов (в порядке убывания), у которых есть домашний номер (“Phones”) и мобильный (“Mobiles”), но email’a (“Emails”).

lxa85, единственная проблема - это столбец с названием "Название контактного данного"

lxa85, использую Oracle Database 11g Express Edition, IDE Toad

lxa85
20-08-2016, 23:05
Arenear, попробуйте двойные кавычки, и почитать тут (http://www.sql.ru/forum/226469/russkie-nazvaniya-poley-vo-view), тут (http://stackoverflow.com/questions/17944104/change-column-name-in-oracle-in-select-statement) и тут (https://docs.oracle.com/database/121/SQLRF/sql_elements006.htm#SQLRF51101)
Oracle Express мне загрузить не удалось, попробую позже.




© OSzone.net 2001-2012