是否可以在Oracle Server中配置隱式鍵入規則(至少是10g)? 如果不是指向規則文檔的鏈接,以及Oracle參數如何影響規則,那就太好了。爲Oracle配置隱式鍵入規則
對於爲例執行此查詢時:
SELECT '' AS A FROM DUAL
甲骨文將報告A列有VARCHAR(0)
型在Oracle 10g和VARCHAR(32)
在Oracle 9i上。
感謝
是否可以在Oracle Server中配置隱式鍵入規則(至少是10g)? 如果不是指向規則文檔的鏈接,以及Oracle參數如何影響規則,那就太好了。爲Oracle配置隱式鍵入規則
對於爲例執行此查詢時:
SELECT '' AS A FROM DUAL
甲骨文將報告A列有VARCHAR(0)
型在Oracle 10g和VARCHAR(32)
在Oracle 9i上。
感謝
你可以明確的,它會與Oracle的所有版本:
SQL> CREATE VIEW test AS SELECT CAST(NULL AS VARCHAR2(32)) var32 FROM DUAL;
View created
SQL> desc test
Name Type Nullable Default Comments
----- ------------ -------- ------- --------
VAR32 VARCHAR2(32) Y
是的,但我們可以遷移大型應用程序,這會對代碼產生非常大的影響。 – Michel 2010-02-10 08:08:12
正如加里說,默認的數據類型是CHAR ....
SQL> create view v23 as select '' a from dual
2/
View created
SQL> desc a
Name Null? Type
------------------ -------- ---------------
A CHAR
你想解決什麼問題?
我們正在將應用程序從Oracle 9i遷移到Oracle 10g。 這種打字差異影響了我們的應用程序,所以我認爲這可以在Oracle中的某處進行配置。然而,正如Gary指出的那樣,差異似乎來自光標共享參數。 謝謝 – Michel 2010-02-10 08:07:31
其實,如果你這樣做 創建視圖AV作爲SELECT''AS A FROM DUAL; 並從user_tab_columns中選擇data_type,data_length,其中table_name ='AV'; 你應該看到兩個版本都以CHAR(0)的形式給出結果。 如果9i返回32個字符,我會懷疑光標共享被設置爲強制 – 2010-02-09 21:44:00
Gary你是對的,不同的是由於光標共享參數...我會投票給你的答案,如果你做出一個真正的答案:) 這解決了我們現在正在處理的特定問題,但並未回答我的更一般問題;) – Michel 2010-02-10 07:56:43