sqlでの文字列は、シングルクォーテーションで囲みます。 では、文字列中にシングルクォーテーションがある場合は、どうしたらよいでしょうか? 答え、『'』を2つ重ねます『''』。 ちなみに、ワイルドカード『%』や『_』をエスケープするには、以下の感じです。 using バインド変数,... シングルクォートをエスケープする q'[エスケープしたい文字列]' これは上の動的sql生成で困ったから。エラーはかれて何かと思ったら、sql文字列の中で文字列を指定しようとしてシングルクォートを入れられなかったからだった。 Q PL/SQLの変数について. バインド変数のついたsqlが発行されるととどうなるのかを示したのが以下の流れです。 ①バインド変数の値と、それを除くsqlが別々にdbmsへ発行される。 ②バインド変数の値は、sqlにマージされる前に解釈され、「'」はエスケープ処理される。 PosterSQLでは文字定数を「”」で括るとエラー PostgreSQLで既存のテーブルにデータを挿入するために、以下のクエリ文を実行しました。 INSERT INTO table_name VALUES ("value1", "value2", "value3"); するとこれ、エラーで返ってきました。 (メッセージまでは覚えてませんが「value1なんてカラムは存在し … 困っています。 ホスト引数で:NAME = "あいうえお" としてoracleに渡し、 PL/SQLでNAMEという変数で受け取った後、 Xという変数にその"あいうえお"を'あいうえお' のように、シングルクォーテーションで囲んで入れたいのです。 ですが、 解説 これは、根本的解決 1) のバインド機構を利用した実装ができない場合に実施すべき実装です。 利用者から入力されるパラメータや、データベースに格納された情報などに限らず、sql 文を構成する全ての変数や演算結果に対し、エスケープ処理を行ってください。

要するにsqlでは文字としてのシングルクォートをエスケープする必要があるということです。特殊文字のエスケープというとバックスラッシュ(「\」)がよく利用されるイメージがありますが、sqlにおいてはシングルクォートをエスケープする場合はシングルクォートを2回重ねます。 シングルクォーテーションをリテラルとして指定する場合は、シングルクォーテーションを重ねて記述します。 つまり、「''」でシングルクォーテーション1つ分になります。 以下、サンプルプログラムです。 SQL> CREATE TABLE sample ( id number, value varchar2(10) );