Pertanyaan PL / SQL, bagaimana cara melepaskan kutipan tunggal dalam sebuah string?


Di Oracle PL / SQL, bagaimana cara melepaskan kutipan tunggal dalam sebuah string? Saya mencoba cara ini, itu tidak berhasil.

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

75
2017-07-03 16:36


asal


Jawaban:


Anda dapat menggunakan kutipan harfiah:

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

Dokumentasi untuk literal dapat ditemukan di sini.

Alternatifnya, Anda dapat menggunakan dua tanda kutip untuk menunjukkan satu kutipan:

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

Mekanisme pengutipan literal dengan sintaks Q lebih fleksibel dan mudah dibaca, IMO.


133
2017-07-03 16:38



Ini sebuah posting blog yang harus membantu dengan kutu yang melarikan diri dalam string.

Inilah metode paling sederhana dari postingan tersebut:

Cara yang paling sederhana dan paling sering digunakan adalah menggunakan tanda kutip tunggal dengan dua tanda kutip tunggal di kedua sisi.

PILIH 'uji satu kutipan' '' dari dua;

Output dari pernyataan di atas adalah:

menguji kutipan tunggal '

Cukup dengan menyatakan bahwa Anda membutuhkan satu karakter kutipan tambahan untuk mencetak satu kutipan> karakter. Itu jika Anda menempatkan dua karakter kutipan tunggal Oracle akan mencetak satu. Yang pertama> bertindak seperti karakter melarikan diri.

Ini adalah cara paling sederhana untuk mencetak tanda kutip tunggal di Oracle. Tetapi itu akan menjadi rumit ketika Anda harus mencetak satu set tanda kutip, bukan hanya satu. Dalam situasi ini, metode berikut berfungsi dengan baik. Tetapi membutuhkan lebih banyak tenaga kerja pengetikan.


13
2017-07-03 18:37



Selain jawaban DCookie di atas, Anda juga dapat menggunakan chr (39) untuk satu kutipan.

Saya merasa ini sangat berguna ketika saya harus membuat sejumlah pernyataan insert / update berdasarkan sejumlah besar data yang ada.

Ini contoh yang sangat sederhana:

Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;

4
2018-02-09 05:39



Cukup cantumkan pernyataan berikut sebelum FOR:

set escape '\';

-4
2017-11-07 19:27