Я видел, что есть функция NVL для PL / SQL, которая заменяет значение при обнаружении нуля. Но что, если я хочу установить для поля значение NULL, например
EXEC SQL UPDATE mytable SET myfield=NULL WHERE otherValue=1;
Когда я запускаю это с C++ в HPUX, 0L используется для null, в то время как в Linux оператор не работает с illegal value.
Могу ли я использовать универсальное нулевое значение / метод Oracle?





NULL - правильное значение в Oracle. У меня нет опыта вызова Oracle из C++, поэтому я не знаю, в чем причина вашей проблемы, но это, должно быть, проблема на стороне клиента. Если бы вы запускали этот оператор через Oracle SQLPlus, он должен был делать то, что вы хотите.
Да, проблема в том, как NULL раскрывается в C++. Для informix существует rsetnull, который устанавливает для переменной соответствующее значение. Есть ли что-нибудь подобное для оракула?
NULL должен работать как есть, но вы можете попробовать использовать индикаторную переменную, как описано здесь: http://download.oracle.com/docs/cd/B10500_01/appdev.920/a97269/pc_06sql.htm#424
О, теперь я понимаю, что должно происходить. Системные заголовки C++ имеют #define NULL 0L (в HPUX), поэтому жестко запрограммированный NULL препроцессор заменяет это значение.
Несколько идей:
Тот факт, что вы используете оператор EXECUTE SQL, говорит о том, что вы используете Oracles Pro * C в программе на C или C++.
Если препроцессор выполняет некоторую трансляцию для NULL, значит, вам не хватает части процедуры компиляции.
Перед компиляцией вам необходимо запустить исходный код через препроцессор Pro * C. Он переводит операторы EXEC SQL в серию структур и вызовов функций, которые компилятор c / C++ может скомпилировать.
Эта ссылка должен помочь с некоторыми концепциями.