我遇到了一個我尚未解釋的問題。我的代碼需要一個數字,使用NCHR獲取數字的國家代碼,然後對其執行RAWTOHEX轉換。10g和11g差異對Oracle Unicode支持
它在10g多年工作。當我們升級到11g時,它開始返回不同的值。我煮了這一切幾個語句,並創建了一個演示腳本:
SET SERVEROUTPUT ON;
DECLARE
rawVar RAW(2000);
nVar NVARCHAR2(1000);
BEGIN
nVar := NCHR(1112);
SELECT RAWTOHEX(nVar) INTO rawVar FROM DUAL;
DBMS_OUTPUT.PUT_LINE('rawVar: ' || rawVar);
END;
/
當在10g中執行時,ouptut是「0458」。在11g(來自同一臺計算機並使用相同的Oracle客戶端軟件)中,輸出爲「00040058」。依賴於輸出的上游過程期望「0458」。有趣的是(對我而言),如果我將nVar的定義更改爲VARCHAR2而不是NVARCHAR2,則在11g上輸出「0458」作爲輸出。
有人可以幫忙解釋爲什麼結果不同嗎?我已經搜索了Oracle的發行說明和支持系統,但沒有找到任何答案。
非常感謝提前。
您可以從SQL環境運行此操作:select nchr(1112)nchr,rawtohex(nchr(1112))rth from dual; – dpbradley 2009-08-20 17:15:16
兩種環境中的營養素相同,NCHR是「?」並且RTH是「0458」 – elmnoise 2009-08-20 17:19:36
因此,似乎dbms_output中的varchar轉換正在影響該值 - 這與您的上游進程如何接收該值類似? – dpbradley 2009-08-20 19:34:25