Di Oracle PL / SQL, bagaimana cara menghindari kutipan tunggal dalam string? Saya mencoba cara ini, 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;
/
Jawaban:
Anda dapat menggunakan kutipan literal:
Dokumentasi untuk literal dapat ditemukan di sini .
Atau, Anda dapat menggunakan dua tanda kutip untuk menunjukkan satu kutipan:
Mekanisme kutipan literal dengan sintaks Q lebih fleksibel dan dapat dibaca, IMO.
sumber
Berikut adalah posting blog yang akan membantu menghilangkan tanda centang dalam string.
Inilah metode paling sederhana dari posting tersebut:
sumber
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 penyisipan / pembaruan berdasarkan sejumlah besar data yang ada.
Berikut contoh yang sangat cepat:
Katakanlah kita memiliki tabel yang sangat sederhana, Pelanggan, yang memiliki 2 kolom, NamaDepan dan NamaBelakang. Kita perlu memindahkan data ke Pelanggan2, jadi kita perlu membuat sekumpulan pernyataan INSERT.
Saya merasa ini sangat berguna saat memindahkan data dari satu lingkungan ke lingkungan lain, atau saat membangun kembali lingkungan dengan cepat.
sumber
EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')'
; bekerja untuk saya. menutupvarchar
/string
dengan dua pasang tanda kutip tunggal berhasil. Pilihan lainnya adalah menggunakanusing
kata kunciEXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'
,; Ingatusing
kata kunci tidak akan berfungsi, jika Anda menggunakanEXECUTE IMMEDIATE
untuk mengeksekusi DDL dengan parameter, namun, menggunakan tanda kutip akan berfungsi untuk DDL.sumber