Всегда интересная проблема ПУСТОГО УКАЗАТЕЛЯ По сравнению с Пробелом управляет мной бит, сумасшедший теперь.
У меня есть две структуры ESQL/C, которые представляют две таблицы. Я выбираю строку от одной таблицы в курсоре. Используя значения двух полей от этой выборки, я получу строку от другой таблицы. Я знаю перед рукой, вторая выборка определенно возвратит одну строку.
Теперь, вторая таблица может иметь пустые значения. Пробелом я имею в виду значения как ''. Когда я делаю разгружение этих символов обнаруживается как '\'. Но в рамках программы C, они не становятся выбранными, я верю.
С другой стороны, я не могу видеть, присутствуют ли эти значения. При принятии я выбираю значения в символе *значение,
если (значение [0] == '\0') или если (значение [0] == '')
не работает. gdb показывает что-то как значение = "\000", ''. Но я не могу проверить это из кода C.
Я вручную загрузился, таблица через канал разграничила файл. Для вставки пробела я ввел | \|.
Может любой сообщать мне, где я неправ.
Вы должны использовать объединение, чтобы собрать данные из двух таблиц за одну операцию. СУБД очень хорошо справляются с объединением; когда вы выполняете объединение вручную в приложении, вы замедляете работу, обычно значительно.
Типы данных являются критическими - и не указаны в вопросе.
Типы SQL
Типы ESQL/C:
char
- для данных CHAR; пробелы заполняются до полной длины с помощью терминатора NUL '\0'. fixchar
- для данных CHAR; пробел заполнен до полной длины без терминатора NUL '\0'. varchar
- для данных VARCHAR; без пустой прокладки. Вы также упоминаете использование '\
' для загрузки данных. Это специальная нотация, используемая с ненулевыми полями VARCHAR нулевой длины для указания этого значения; пустое поле указывает на значение NULL в формате выгрузки. (На диске пустой не нулевой VARCHAR занимает один байт, значение 0x00 для длины ноль; NULL VARCHAR занимает два байта, значения 0x01 0x00 для длины 1 и значения NULL (или NUL).)
Судя по вашим словам, во второй таблице у вас есть возможно пустые (но не NULL) значения VARCHAR(n). Они должны отображаться как строковые значения, где первый байт - NUL '\0' в вашем коде на C - независимо от того, какой из типов переменных вы используете. Вывод GDB соответствует этому; первый байт - '\0' (или '\000'); остальное не имеет значения.
Возможно, вы захотите найти индикаторные переменные; они говорят вам о том, является ли конкретное значение, выбранное из БД, NULL или нет.
Если у вас все еще есть проблемы, опубликуйте код (предпочтительно очень маленькую компилируемую программу, которая показывает проблему - скажем, до 50 строк или около того; или небольшой фрагмент кода - скажем, 20 строк или около того).
В Informix-SE, когда я выгружаю таблицу с колонками, имеющими значения NULL, выгруженные колонки появляются с двумя символами трубы "||", означающими отсутствие значения для этой конкретной колонки.