2009-12-23 42 views
3

我看到一個有趣的結果試圖ColdFusion作爲一個SYS_GUID()值使用7的ColdFusion - 甲骨文GUID古怪

如果我做

<cfquery>select sys_guid() as guid from dual</cfquery> 

返回GUID值被看作是一個二進制由Coldfusion領域。

但是,如果我這樣做

<cfquery>select sys_guid() || '' as guid from dual</cfquery> 

返回GUID值被看作是一個字符串。

我已經嘗試了幾個不同的Oracle和Coldfusion/Macromedia驅動程序,它們都響應相同。後面的聲明是我一直在使用的,所以我可以稍後在代碼中處理這些guid,並且工作正常。我希望有人能解釋爲什麼我會得到這些結果。

回答

6

GUID是128位(16字節)的二進制值。他們不是字符串。查看sys_guid的Oracle文檔。

你的目標是作爲字符串處理GUID。這意味着您需要將GUID值轉換爲字符串值。當你簡單地做select sys_guid() as guid from dual,那麼你會得到一個128位二進制值,如預期的那樣。當你改爲select sys_guid() || '' as guid from dual時,首先Oracle必須先將128位二進制值轉換爲字符串值,然後才能執行並置,因爲級聯僅對兩個字符串值起作用。 Oracle知道如何將二進制值轉換爲字符串值,並且如果您在Oracle預期字符串值時放入二進制值,它將執行此轉換。

+0

謝謝,這是有道理的。 – Jay 2009-12-23 14:48:13