2008-09-11 15 views
5

これはわかりにくい質問ですが、うまくいけば誰かが私を助けてくれます。Oracle列の別名の二重引用符

私が取り組んでいるシステムでは、ストアドプロシージャ内で実行するための動的SQL文字列と、実際にはユーザー生成データの別のテーブルから取得された値である列エイリアスを定義する動的SQLの一部が構築されます。

たとえば、文字列は次のようになります。

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

これは問題なく動作します。ただし、エイリアスに使用される値には、二重引用符が含まれている可能性があります。これは、外部の引用符を分割します。私は多分エイリアスの内部で二重引用符を何とか逃げることができると思っていましたが、私はそれを行う方法を考え出すことはありませんでした。バックスラッシュは機能せず、2つの二重引用符を使用すると、このエラーが発生します。

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 

Oracleは(Oracleが生成された列名に気づく)、これを返します。

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

Oracleの列名が私の二重引用符が含まれていないという事実をオラクルはおそらくそれを表現できないと私に伝えます。

私が見ることができる限り、列名を使用する前にデータから二重引用符を取り除くことが最善の方法です。悲しいことに、それはまたこれらの列を選択するときに同じフィルタリングを行う必要がありますが、別の方法はありません。

0

おそらく実り多い調査領域は、見積もりメソッドを調べることです。

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

2

のOracleクォート演算子を使用します。

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

「#」の任意の文字

0

に置き換えることができる2つの単一引用符は、実際の出力における一つの二重引用符のように見える、これを試してみてください。
select 1 as "University ''John Smith''" from dual;

関連する問題