Karakter escape Oracle SQL (untuk '&')

86

Ketika mencoba untuk mengeksekusi pernyataan penyisipan SQL menggunakan Oracle SQL Developer, saya terus menghasilkan prompt "Masukkan nilai substitusi":

insert into agregadores_agregadores 
(
 idagregador,
 nombre,
 url
) 
values 
(
 2,
 'Netvibes',
 'http://www.netvibes.com/subscribe.php?type=rss\&url='
);

Saya telah mencoba keluar dari karakter khusus dalam kueri menggunakan '\' di atas tetapi saya masih tidak dapat menghindari tanda &, '&', menyebabkan penggantian string.

ian_scho
sumber

Jawaban:

127

& adalah nilai default untuk DEFINE, yang memungkinkan Anda menggunakan variabel substitusi. Saya suka mematikannya menggunakan

ATUR TETAPKAN NONAKTIF

maka Anda tidak perlu khawatir untuk kabur atau CHR (38).

Neil Kodner
sumber
60

|| chr(38) ||

Solusi ini sempurna.

Aseem
sumber
2
Ini menyelesaikan pekerjaan, tetapi sedikit kikuk saat berurusan dengan string yang sudah ada sebelumnya.
aglassman
Bagi saya SET DEFINE OFF tidak berhasil. Solusi Anda akan berhasil. Terima kasih ...
Ashok kumar
31

Setel karakter definisikan ke sesuatu selain &

SET TETAPKAN ~
buat tabel bla (x varchar (20));
masukkan ke dalam nilai bla (x) ('bla & amp');
pilih * dari bla;

X                    
-------------------- 
bla & amp 

RC.
sumber
15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');
Jeffrey Kemp
sumber
Terima kasih kepada Jeffrey Kemp karena telah memberikan solusi dengan || chr (38) ||
Ini adalah solusi umum yang jauh lebih baik yang tidak bergantung pada hak istimewa pengguna (yaitu ketika pengguna tidak diizinkan untuk SET DEFINE OFF) dan ketika pengguna ingin menentukan ampersand dalam teks dan variabel yang ditentukan dalam perintah SQL yang sama.
Analisis Fuzzy
12
SELECT 'Free &' || ' Clear' FROM DUAL;
drj
sumber
4

select 'one'||'&'||'two' from dual

Izo
sumber
Ampersand hanya perlu berada di akhir string, menghemat setengah penggabungan. select 'one&' || 'two' from dual
durette
1

Jawaban sebenarnya adalah Anda perlu mengatur karakter escape ke '\': SET ESCAPE ON

Masalahnya mungkin terjadi karena pelolosan dinonaktifkan, atau karakter pelolosan disetel ke sesuatu selain '\'. Pernyataan di atas akan mengaktifkan pelolosan dan menyetelnya ke '\'.


Tak satu pun dari jawaban lain yang diposting sebelumnya benar-benar menjawab pertanyaan asli. Mereka semua mengatasi masalah tetapi tidak menyelesaikannya.

Kecebong yang mengerikan
sumber
4
Saya membaca di Ask Tom ( asktom.oracle.com/pls/asktom/… ) bahwa "SET ESCAPE adalah sqplus'ism". Jadi ini hanya akan menjadi jawaban yang sebenarnya jika pertanyaannya tentang SQL * Plus.
Karl Kieninger
-1

tambahkan ini sebelum permintaan Anda

set define off;
Helali
sumber