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.

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).


60

|| chr(38) ||

Solusi ini sempurna.


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 


15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');

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;

4

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


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.


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;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.