144

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;
/
4

5 に答える 5

224

リテラル引用符を使用できます。

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

リテラルのドキュメントはここにあります

または、2つの引用符を使用して、1つの引用符を表すこともできます。

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

Q構文を使用した文字通りの引用メカニズムは、より柔軟で読みやすいIMOです。

于 2012-07-03T16:38:44.143 に答える
28

これは、文字列の目盛りをエスケープするのに役立つはずのブログ投稿です。

上記の投稿からの最も簡単な方法は次のとおりです。

最も単純で最もよく使用される方法は、両側に2つの単一引用符がある単一引用符を使用することです。

SELECT 'test single quote''' from dual;

上記のステートメントの出力は次のようになります
。testsinglequote '

一重引用符を印刷するには、追加の一重引用符が必要であると単純に述べます。つまり、一重引用符を2文字入力すると、Oracleは1文字を出力します。最初のものはエスケープ文字のように機能します。

これは、Oracleで一重引用符を印刷する最も簡単な方法です。ただし、引用符を1つだけではなく一連印刷する必要がある場合は、複雑になります。この状況では、次の方法で問題なく動作します。しかし、それはもう少しタイピングの労力を必要とします。

于 2012-07-03T18:37:19.490 に答える