我已经看到PL / SQL有一个NVL函数,当遇到null时会替换一个值 但是,如果我想将字段设置为NULL,例如
EXEC SQL UPDATE mytable SET myfield=NULL WHERE otherValue=1;
当我在HPUX上使用C ++运行时,0L用于null,而在Linux上,语句以illegal value
失败。
我可以使用通用的Oracle null值/方法吗?
感谢。
答案 0 :(得分:4)
哦,现在我意识到必须发生的事情。 C ++系统头文件有#define NULL 0L
(在HPUX中),因此预处理器将硬编码的NULL替换为该值。
几个想法:
答案 1 :(得分:1)
NULL是Oracle中的正确值。我没有从C ++调用Oracle的经验,所以我不知道你的问题的原因是什么,但它必须是客户端的一个问题。如果你通过Oracle的SQLPlus运行该语句,它应该做你想要的。
答案 2 :(得分:1)
NULL应按原样运行,但您可以尝试使用指示符变量,如下所述:http://download.oracle.com/docs/cd/B10500_01/appdev.920/a97269/pc_06sql.htm#424
答案 3 :(得分:0)
是 - 问题是在C ++中扩展NULL的方式。 对于informix,有rsetnull将varialble设置为适当的值。 对于oracle有什么这样的吗?
答案 4 :(得分:0)
您正在使用EXECUTE SQL语句,表示您在C或C ++程序中使用Oracles Pro * C.
如果预处理器正在对NULL进行一些转换,那么你就错过了一段编译过程。
在编译之前,您需要通过Pro * C预处理器运行源代码。它将EXEC SQL语句转换为c / c ++编译器可以编译的一系列结构和函数调用。
This link应该有助于解决一些概念。