2013-01-24 42 views
2

創建一個表以雙引號逃避真正的雙引號似乎並不在Oracle的SQL語法的工作:我可以使用Oracle在列標題中避免雙引號嗎?

CREATE TABLE "MyTable" (
"Col""umn 1" varchar(168) 
); 

以上失敗。有沒有辦法逃脫雙引號,使「上校「UMN 1'

+0

我想我們不能創建一個包含'「'列名。 – TechDo

+5

到底爲什麼要這麼做? –

+5

到底爲什麼要這麼做?我看不出有什麼好的理由這除非你鄙視每個人誰將不得不查詢此表! – GarethD

回答

8

你不能 按照documentation:從 您的數據庫字符

不帶引號的標識符只能包含字母數字字符數據庫鏈接也可以包含句點(。)和 「at」符號(@)。Oracle強烈建議您不要使用$和#以及下劃線(_),美元符號($), 和井號(#)。 非引用標識符

帶引號的標識符可以包含任何字符和標點符號 以及空格。但是,引號和非引號標識符 都不能包含雙引號或空字符(\ 0)。

+0

在標識符中使用引號(我的意思是ASCII 34,而不是Unicode風格)的不可能性實際上可以用於某些情況。例如,如果您維護一些類似元數據的系統(存儲函數參數名稱和返回值),則可以在包含引號的輔助名稱(例如'「return」')下注冊返回值。那麼你可以肯定,攻擊者不能使用'「」return「」'混淆參數來崩潰系統創建函數,因爲Oracle不允許她這樣做。 –

0

也許這將幫助... ...但是請不要用這樣的列創建表:

CREATE TABLE DropMe AS 
SELECT rpad('X', 168, ' ') "Col''umn1" FROM dual 
/

SELECT * FROM DropMe 
/

SQL> 

Col"umn1 
-------------------------------------..... 
X   
+0

這會產生兩個撇號而不是引號(ASCII代碼34):可以通過查詢 'select length(column_name)from all_tab_cols where table_name ='DROPME''(results 9)或類似方法輕鬆驗證。 –

2

你可以,當然,使用unicode!

SELECT 
    1 "「Unicode Rocks」", 
    2 "ʺSooo cooolʺ", 
    3 ""My co-workers love me"" 
FROM DUAL 
相關問題