5

わかりました、これは少しあいまいな質問ですが、誰かが私を助けてくれることを願っています.

私が取り組んでいるシステムは、ストアド プロシージャ内で実行するための動的 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.

以前にこの問題を経験した人はいますか? 誰かが持っている洞察に乾杯。

psエイリアスにはスペースが含まれている可能性があるため、エイリアスを引用符で囲む必要があります。

4

5 に答える 5

4

二重引用符の代わりに別の文字を入れて、コード内でそれを二重引用符に置き換えることはできますか?

このようなもの:

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

次に | を置き換えるだけです。と "。

私はそれがハックであることを知っていますが、これ以上の解決策は思いつきません...そして、あなたがそこで行っていることはとにかくハックです。「良い」方法は、値と列名を別々に選択し、それらをコードで関連付けることです。それは物事をずっときれいにするでしょう。

于 2008-09-11T14:39:39.200 に答える
2

Oracle 引用演算子を使用します。

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

「#」は任意の文字に置き換えることができます

于 2010-02-02T07:50:30.560 に答える
1

これを実行すると:

select 'test"columnname"' from dual

Oracle はこれを返します (Oracle が生成した列名に注意してください)。

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

Oracle の列名に私の二重引用符が含まれていないという事実は、Oracle がおそらくそれを表現できないことを示しています。

私が見る限り、列名を使用する前にデータから二重引用符を削除することをお勧めします。残念ながら、これらの列を選択するときに同じフィルタリングを行う必要がありますが、別の方法はありません。

于 2008-09-11T14:10:21.190 に答える
0

おそらく有益な調査領域は、引用方法を調べることです。

私の $quotedString = $dbh->quote( $string );

于 2008-09-16T18:29:44.707 に答える