c++ - PL/SQL - 设置空值

标签 c++ sql oracle plsql

我发现 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/

相关文章:

c++ - 为什么 reinterpret_cast 在危险时仍在使用

c++ - 使用 C++ 针对 xsd 验证 xml

c++ - 如何将库 curlpp 添加到 C++ 项目

mysql - 如何从两个表中编写选择查询

sql - 正则表达式中的多种模式

c++ - 变量的指针和 cout 地址

SQL做一个插入然后抛出异常

mysql - 使用 SQL 获取表的前 k 条记录/行

MySQL:是否可以使用 SELECT 作为唯一权限在 SELECT 之外设置变量?

java - 创建数据库 View 与创建 Hibernate 映射 - 性能