2016-08-12 44 views
1

oracle-pro-c已推薦使用指示符變量作爲附加到主機變量的"NULL flags"。根據文檔,我們可以將每個主變量與一個可選的指示變量(簡短類型)相關聯。例如:Oracle pro * c指標變量與查詢執行中的NVL

short indicator_var; 
EXEC SQL SELECT xyz INTO :host_var:indicator_var 
    FROM ...; 

我們也可以選擇使用NVL作爲記錄在https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm,例如,如:

EXEC SQL SELECT NVL(TO_CHAR(xyz), '') INTO :host_var 
     FROM ...; 

哪一個是在性能方面更好?

+2

使用指標變量可能是'更有效',但可能幾乎是無法衡量的。它確實意味着更少的SQL來解析服務器。它確實意味着更少的功能執行。我認爲'SQL更簡單'是一大好處。 –

+0

@JonathanLeffler贊同較簡單的SQL,解析邏輯較少,指標變量越來越慢,尋找更好的解決方案的選項,沒有指示變量,速度更快,但是如果某個col是空值,那麼呢? –

+0

我不太瞭解Oracle Pro \ * C能夠進一步提供幫助。我之前的評論(不是一個答案,不管它是否被注意到)是基於與其他數據庫管理系統(Oracle DBMS)的通用經驗 - 這就是爲什麼它不是答案。根據我的經驗,最好的做法是編寫客戶端(Pro \ * C)程序中的空值處理,而不是讓DBMS處理所有這些。我相信在Oracle和空字符串與空字符串之間存在一些問題,但是再次,我沒有Oracle工作的直接經驗來證實這一點。 –

回答

2

Ah,Pro * C。這已經有一段時間了,超過20年了,但我認爲我的記憶在這裏爲我服務。

使用指針變量會在性能方面更好,原因有二:

  • 的SQL比較簡單,所以有分析較少和更少的字節將通過網絡傳送到數據庫服務器轉移。
  • 在Oracle中一般情況下,「空」值以0字節編碼。一個空字符串包含一個長度(N字節)和存儲空間(0字節)。因此,在返回的結果集中更有效地對NULL值進行編碼。

現在在實踐中,你不會注意到很多差異。但你問:-)