【发布时间】:2016-08-12 03:13:12
【问题描述】:
oracle-pro-c 建议使用指标变量作为附加到主机变量的"NULL flags"。根据文档,我们可以将每个主变量与可选的指示变量(短类型)相关联。例如:
short indicator_var;
EXEC SQL SELECT xyz INTO :host_var:indicator_var
FROM ...;
我们也可以使用 https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm 中记录的 NVL,例如:
EXEC SQL SELECT NVL(TO_CHAR(xyz), '') INTO :host_var
FROM ...;
在性能方面哪个更好?
【问题讨论】:
-
使用指标变量可能“更有效”,但可能几乎无法衡量。这确实意味着服务器要解析的 SQL 更少。这确实意味着更少的函数执行。我会选择“SQL 更简单”作为主要优势。
-
@JonathanLeffler 同意使用较少解析逻辑的更简单的 SQL,我对指标变量越来越慢,并寻找有更好解决方案的选项,没有指标变量,它会更快,但如果一些 col 是那么空值呢?
-
我对 Oracle Pro*C 的了解不够,无法提供进一步帮助。我之前的评论(不是答案,请注意)是基于对 Oracle 以外的其他 DBMS 的一般经验 - 这就是为什么它不是答案。根据我的经验,最好在客户端 (Pro*C) 程序中对空值处理进行编码,而不是让 DBMS 处理所有这些。我相信 Oracle 和空字符串与空字符串存在一些问题,但同样,我没有 Oracle 工作的直接经验来证实这一点。
标签: c oracle oracle11g oracle-pro-c embedded-sql