oracle-pro-c建议将指示符变量用作附加到主机变量的"NULL flags"。根据文档,我们可以将每个主机变量与一个可选的指示符变量(short类型)相关联。例如:
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 ...;就性能而言,哪一个更好?
发布于 2016-08-12 20:39:10
哦,Pro*C。那是一段时间了,超过20年了,但我想我的记忆力在这里很好。
使用指示符变量在性能方面会更好,原因有两个:
现在,在实践中,您不会注意到太多差异。但您问:-)
发布于 2020-02-06 19:23:22
根据我的经验,NVL比指示符变量慢得多,特别是在嵌套(是的,您可以嵌套它们)以插入或更新字段的情况下。那是很久以前的事了,我记不清具体的情况了,但我记得性能的提升是真实的。在select上,这不是很明显,但使用指示符变量还允许检测发生截断的情况。
如果使用VARCHAR或UVARCHAR列,还可以使用第三种方法检测NULL中的/Empty字符串。len字段将被设置为0,这意味着该值为空。由于Oracle不区分NULL和长度为0的字符串,因此它们大致相同。
https://stackoverflow.com/questions/38909277
复制相似问题