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