1

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 ...;

哪一个在性能方面更好?

4

2 回答 2

2

啊,Pro*C。这是一段时间前,超过 20 年,但我认为我的记忆在这里很好。

使用指标变量在性能方面会更好,原因有两个:

  • SQL 更简单,因此解析更少,通过网络传输到数据库服务器的字节也更少。
  • 通常,在 Oracle 中,“Null”值以 0 字节编码。一个空字符串包含一个长度(N 字节)和存储空间(0 字节)。因此,NULL 值在返回的结果集中被更有效地编码。

现在在实践中,您不会注意到太多差异。但你问:-)

于 2016-08-12T12:39:10.077 回答
0

根据我的经验NVL,它比指示变量慢得多,尤其是在为 INSERT 或 UPDATE 字段嵌套(是的,您可以嵌套它们)的情况下。那是很久以前的事了,我不记得确切的情况,但我记得性能提升是真实的。在选择时并不那么明显,但使用指示变量还可以检测发生截断的情况。

如果您使用VARCHARorUVARCHAR列,则还有第三个选项可以检测NULLOracle 中的 /Empty 字符串。len 字段将设置为 0,这意味着该值为空。由于 Oracle 不区分NULL长度为 0 的字符串,因此它或多或少是相同的。

于 2020-02-06T11:23:22.127 回答