Вставить / обновить несколько пробелов в столбце в Oracle

У меня есть столбец типа varchar2 длиной 10, и я хочу обновить этот столбец только с 7 пробелами, но когда я попытался выбрать или обновить значение, я получил только один пробел.

Как я могу обновить столбец, поскольку 7 пробелов - единственное обновляемое значение?

Я пробовал следующий запрос:

create table temp(name varchar(10));
insert into temp values('       ');
update temp set name='      ';
commit;
select * from temp;

Я получаю столбец только с одним пробелом;

Я использую Oracle SQL * Plus.


person Hatim Kumar    schedule 20.06.2013    source источник
comment
Я не знаю об Oracle, но многие базы данных не хранят конечные пробелы.   -  person Darius X.    schedule 21.06.2013
comment
если вы select length(name) from temp; вернет ли он что-нибудь неожиданное? Я подозреваю, что вы говорите, что есть только 1 символ из-за какой-то проблемы с презентацией sqlplus.   -  person Michael O'Neill    schedule 21.06.2013
comment
Oracle сохраняет пробелы, если вы их укажете. Хатим - я просто попробовал это здесь (Oracle 11gR2), и он сохранил пробелы. И я использую SQLPlus. Попробуйте SELECT LENGTH(name) FROM temp и посмотрите, может ли это просто дисплей с SQLPlus.   -  person Ed Gibbs    schedule 21.06.2013
comment
@CleverIdeaWidgetry Возможно, есть проблема с презентацией, из-за которой при выборе таблицы в SQL * PLUS отображается только одно пространство. Есть ли в любом случае, с помощью которого я также могу показать конечные пробелы.   -  person Hatim Kumar    schedule 21.06.2013
comment
@HatimKumar Это зависит от того, что вы имеете в виду под шоу. Существует множество настроек SQL Plus, связанных с презентацией, для управления такого рода проблемами с презентацией. Возможно, уточнить фактические команды SQL Plus, помимо оператора select.   -  person Michael O'Neill    schedule 21.06.2013
comment
@HatimKumar Я также рекомендую вам бегать, а не ходить, на otn.oracle.com и скачать SQL Developer. Больше нет причин для интерактивного SQL * Plus.   -  person Michael O'Neill    schedule 21.06.2013


Ответы (1)


Не волнуйтесь, там 7 пробелов. Это SQL * Plus, который скрывает ведущие пробелы на дисплее. Вы можете доказать это, окружив столбец имени дополнительными символами:

select '>'||name||'<' from temp;
>    <

РЕДАКТИРОВАТЬ: виноват WORD_WRAPPED-функция. Чтобы SQL * Plus не ел пробелы, переключите формат с WORD_WRAPPED на WRAPPED или TRUNCATED:

update temp set name = '   x   ';
SQL> column name format a10 word 
SQL> select name from temp;
NAME
----------
x

SQL> column name format a10 trunc
SQL> select name from temp;

NAME
----------
    x
person wolφi    schedule 20.06.2013
comment
Могу ли я как-нибудь показать эти пробелы без окружающих символов. - person Hatim Kumar; 21.06.2013
comment
Спасибо, это действительно очень полезно. Можем ли мы реализовать то же самое в plsql dbms_output.put_line (''); для отображения всех пробелов в выводе. - person Hatim Kumar; 21.06.2013