2015-12-03 7 views
0

В настоящее время я переношу C-приложение из RdB (OpenVMS) в Oracle 11 (Linux). Я теперь наткнулся на разницу между двумя системами баз данных.ms Oracle: Избегайте пустого заполнения в Embedded SQL

Пример:

create table MYTAB(id number(13), name varchar2(10)) ; 

Содержание

Id Name 
1 Smith 
2 Smith<blank> // trailing blank after Smith 

Когда я выбираю имена в Embedded SQL, Oracle добавляет конечные пробелы до длины моей переменной хоста, то есть, два имени не может быть различен. Даже если я TRIM имя, Oracle добавляет пробелы.

Но с Select-Заявлением по имени столбца я должен дать точное количество пробелов:

select id from MYTAB where name ='Smith' -> gives Id 1 
select id from MYTAB where name ='Smith ' -> gives Id 2 

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

Есть ли способ остановить Oracle от пустого заполнения?

Большое спасибо заранее Йорг

+0

невозможно, что Oracle будет прокладочные пробелы в ** ** VARCHAR2 колонки типа. Это происходит, только если у вас есть тип ** CHAR **. Если у вас есть такие значения, то единственной причиной является то, что сами данные хранятся в виде пустых дополнений. –

ответ

0

У вас есть поле имеет VARCHAR2(), который не вызовет каких-либо пустой отступы, если у вас есть CHAR(), что делает.

В инструкции вставки вам нужно TRIM() значение перед вставкой. Мне кажется, что ваше преобразование в таблицу неверно.

На ваш выбор вы должны быть в состоянии сделать ...

select id from MYTAB where trim(name) ='Smith' 

Кроме того, когда вы начинаете использовать такие функции, как TRIM() на где положение может привести к Oracle, чтобы сделать сканирование таблицы и игнорировать индексы.

+1

Проблема заключается не в том, что значение пустое в базе данных (это не так). Моя проблема заключается в том, что при выборе значения через встроенный SQL значение возвращается пустым (заполняется конечными пробелами до длины переменной хоста) –

1

Я думаю, что нашел решение самостоятельно. Если добавить вызов CHAR_MAP = STRING к вызову прекомпилятора, встроенные запросы SQL для выбора столбца VARCHAR2 не заполняют мои строки пробелами. С этим я могу обработать свою проблему.

С наилучшими пожеланиями Йорг

 Смежные вопросы

  • Нет связанных вопросов^_^