我发现 PL/SQL 有一个 NVL 函数,当遇到 null 时,它会替换一个值。
但是如果我想将一个字段设置为 NULL 该怎么办,例如
EXEC SQL UPDATE mytable SET myfield=NULL WHERE otherValue=1;
当我在 HPUX 上使用 C++ 运行此命令时,0L 用于 null,而在 Linux 上,该语句因非法值
而失败。
是否有我可以使用的通用 Oracle null 值/方法?
最佳答案
哦,现在我意识到一定发生了什么。 C++ 系统 header 具有#define NULL 0L
(在 HPUX 中),因此硬编码的 NULL 会被预处理器替换为该值。
几个想法:
- 只需更改 SQL 语句中 NULL 的大小写即可。 Oracle 不关心大小写,如果它与定义的版本不完全匹配,则不会被替换。当然,他们可能已将 NULL、Null、null 等定义为相同的值。
- 找到一种方法来禁用该行代码周围的 NULL 定义。我认为有一种方法可以做到这一点,但我对预处理器指令不太了解
- 尝试使用空字符串而不是文字 NULL。 Oracle 应该将其转换为 NULL。
- 将语句文本存储在配置文件中并将其读入字符串中。这样它实际上不会出现在代码中,因此预处理器不会修改它。
- 在 Oracle 中编写一个仅返回 NULL 的函数,并在语句中使用该函数而不是 NULL 文字。
关于c++ - PL/SQL - 设置空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/305349/