2008-09-11 106 views
5

好的,這是一個晦澀難懂的問題,但希望有人能幫助我。Oracle列別名中的雙引號

我正在處理的系統在存儲過程中構建一個用於執行的動態SQL字符串,並且該動態SQL的一部分定義列別名,它們本身實際上是從用戶生成數據的另一個表中檢索的值。

因此,例如,字符串可能看起來像這樣;

SELECT table1.Col1 AS "This is an alias" FROM table1 

這工作正常。但是,用於別名的值可能包含一個雙引號字符,該字符會打破外引號。我想我可能會以別名的方式在別名中跳出雙引號,但我一直沒有搞清楚如何去做。反斜槓不起作用,並且在一行中使用兩個雙引號會導致此錯誤;

SQL Error: ORA-03001: unimplemented feature 
03001. 00000 - "unimplemented feature" 
*Cause: This feature is not implemented. 

有沒有人有過這個問題的經驗呢? 任何人都有見識的乾杯。

p.s.在別名周圍需要引號,因爲它們可以包含空格。

回答

4

你可以把另一個字符,而不是雙引號,並用代碼中的雙引號代替嗎?

事情是這樣的:

SELECT table1.Col1 AS "This is |not| an alias" FROM table1 

然後只需更換|與「

我知道這是一個黑客,但我想不出有什麼更好的解決方案......而你在做什麼有一個黑客無論如何,」好「的方法是選擇值和列名分開,並將它們關聯到你的代碼中,這會使事情變得更加簡潔。

1

當我運行此:

select 'test"columnname"' from dual 

甲骨文返回此(注意甲骨文生成的列名):

'TESTCOLUMNNAME' 
-------------------------------- 
test"columnname 

,甲骨文的列名不包括我的雙引號的事實告訴我,甲骨文可能無法代表這一點。

就我所見,最好的辦法是在使用列名之前從數據中去掉雙引號。可悲的是,這也需要你做相同的過濾,當你選擇這些列,但我沒有看到另一種方式。

0

調查的一個可能有效的領域是查看引用方法。

my $ quotedString = $ dbh-> quote($ string);

2

使用Oracle報價運營商:

select q'#someone's quote#' from dual; 

以「#」可以由任何字符

0

試試這個來代替,兩個單引號實際上看起來像一個雙引號輸出:
select 1 as "University ''John Smith''" from dual;