web-dev-qa-db-ja.com

PL / SQL Developerでのアンパサンドのエスケープ

Oracleデータベースに対して単純なINSERTステートメントを試しています。値の1つはVARCHAR2フィールドであり、挿入ステートメントにはアンパサンドが含まれています。どうすればいいですか?私は次の方法を試しました:

  1. セットエスケープをオンにして&を\&としてエスケープする
  2. スキャンをオフに設定します(これにより、ORA-00922欠落または無効なオプションエラーが発生します)
  3. 定義をオフに設定します(これにより、ORA-00922欠落または無効なオプションエラーが発生します)

他のアイデアはありますか?

21
Ray Booysen

私がそれを解決した方法は、&を別の&でエスケープすることです。

例えば:

INSERT INTO Foo (Bar) VALUES ('Up && Away');

うまく動作します。すべての助けてくれてありがとう

26
Ray Booysen

現在のバージョンのPL/SQL Developer(11.0.x)には、置換変数を無効/有効にするボタンがあります。

enter image description here

21

慣れるのに時間がかかるPL/SQL Developerの機能の1つは、さまざまな種類のウィンドウです。

これらの1つは、基本的にSQL * Plusエミュレーターであるコマンドウィンドウです。 SQLだけでなくSQL * Plusコマンドも実行できるため、SET ESCAPESET DEFINE 本当に SET SCAN OFFそのウィンドウで動作します。

12
APC

このようなことを試しましたか?

INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy');

私の最初の答えを改善すると、あなたの問題はPL/SQL Developerに関連しています。 PL/SQL Developerコマンド・ウィンドウでブロックを実行する場合、標準のSET DEFINE OFFも使用できます。これはSQL * Plusと同じように機能します。

8
Aitor

連結は私のために完全にうまく機能しましたが、私は私のselectステートメントでやったことです:

select FUND_NM
FROM PERFORMANCE
WHERE upper(FUND_DESC) in ('My L&' ||'L FUNDS')
4
NSC

PL/SQLでアンパサンドが必要な場合は、chr(38)を使用します。

addr:= 'mysite.com/order.aspx?no=5678' || CHR(38) || 'id=947';
--above line gives you 'mysite.com/order.aspx?no=5678&id=947';
3
mason

これは単なるSQL Editorの問題です。これを解決するには、SET DEFINE OFFでプロシージャをコンパイルします。 。 PL(サーバーで実行)である実行は、この問題に直面しません。

1