Oracle PL/SQLでは、文字列内の単一引用符をエスケープする方法は?私はこの方法で試しましたが、うまくいきません。
declare
stmt varchar2(2000);
begin
for i in 1021 .. 6020
loop
stmt := 'insert into MY_TBL (Col) values(\'ER0002\')';
dbms_output.put_line(stmt);
execute immediate stmt;
commit;
end loop;
exception
when others then
rollback;
dbms_output.put_line(sqlerrm);
end;
/
リテラル引用を使用できます。
stmt := q'[insert into MY_TBL (Col) values('ER0002')]';
リテラルのドキュメント ここにあります 。
または、2つの引用符を使用して、単一引用符を示すことができます。
stmt := 'insert into MY_TBL (Col) values(''ER0002'')';
Q構文を使用したリテラル引用メカニズムは、より柔軟で読みやすいIMOです。
これが ブログ投稿 です。これは、文字列のティックをエスケープするのに役立ちます。
上記の投稿の最も簡単な方法は次のとおりです。
最も単純で最も使用される方法は、両側に2つの単一引用符を含む単一引用符を使用することです。
SELECT 'single quote' '' dualから;
上記のステートメントの出力は次のようになります。
一重引用符をテストする」
単一引用符を印刷するには、追加の単一引用符文字が必要であると述べるだけです。つまり、2つの一重引用符を配置すると、Oracleは1つを出力します。最初の1つはエスケープ文字のように機能します。
これは、Oracleで単一引用符を印刷する最も簡単な方法です。ただし、引用符を1つではなく1組だけ印刷する必要がある場合は、複雑になります。この状況では、次の方法が適切に機能します。ただし、さらに入力作業が必要です。
上記のDCookieの答えに加えて、単一引用符にchr(39)を使用することもできます。
これは、大量の既存データに基づいて多数の挿入/更新ステートメントを作成する必要がある場合に特に役立ちます。
これは非常に簡単な例です:
Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;