1. ホーム
  2. oracle

[解決済み] PL/SQLで、文字列中のシングルクォートをエスケープする方法は?

2022-01-26 14:34:59

質問

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つの引用符で1つの引用符を表すこともできます。

stmt := 'insert into MY_TBL (Col) values(''ER0002'')';

Q構文によるリテラルクオートの仕組みは、より柔軟で可読性が高いと私は思います。