Cara menghindari substitusi variabel di Oracle SQL Developer dengan 'trinidad & tobago'

111

Ketika saya mencoba menjalankan pernyataan ini di Oracle SQL Developer 2.1, sebuah kotak dialog "Enter Substitution Variable" muncul meminta nilai pengganti untuk TOBAGO ,

update t set country = 'Trinidad and Tobago' where country = 'trinidad & tobago';

Bagaimana saya dapat menghindari hal ini tanpa menggunakan chr(38)atau u'trinidad \0026 tobago'yang keduanya mengaburkan tujuan pernyataan?

Janek Bogucki
sumber
1
Aneh, ketika saya mencoba menjalankan kueri persis seperti itu di SQL developer 2.1, saya tidak mendapatkan jendela variabel pengganti? (Dan definisi saya pasti disetel ke aktif)
wasatz
Pertanyaan ini sangat membantu saya.
Oh Chin Boon

Jawaban:

192

Panggil ini sebelum kueri:

set define off;

Atau, hacky:

update t set country = 'Trinidad and Tobago' where country = 'trinidad &' || ' tobago';

Dari Tuning SQL * Plus :

SET DEFINE OFF menonaktifkan penguraian perintah untuk mengganti variabel substitusi dengan nilainya.

Nick Craver
sumber
9
Apa (lagi) set define off;lakukan?
Xonatron
15

Dalam SQL * Plus, meletakkan SET DEFINE ?di bagian atas skrip biasanya akan menyelesaikan masalah ini. Mungkin berfungsi untuk Pengembang Oracle SQL juga.

diederikh
sumber
2
SET TETAPKAN? tidak menekan perilaku substitusi variabel di SQL Developer 2.1. Seperti dicatat oleh Nick SET DEFINE OFF juga berfungsi.
Janek Bogucki
set define berfungsi tetapi DBA tidak mengizinkan untuk menggunakannya kadang-kadang saya tidak tahu mengapa
nikhil sugandh
1

ini akan berfungsi seperti yang Anda minta tanpa CHAR (38):

update t set country = 'Trinidad and Tobago' where country = 'trinidad & '|| 'tobago';

create table table99(col1 varchar(40));
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
SELECT * FROM table99;

update table99 set col1 = 'Trinidad and Tobago' where col1 = 'Trinidad &'||'  Tobago';
nikhil sugandh
sumber
Pertanyaan saya adalah bagaimana ini bisa dilakukan tanpa menggunakan chr(38).
Janek Bogucki
@JanekBogucki mengambilnya dengan benar sekarang tanpa menggunakan CHAR (38)
nikhil sugandh
saya memberi Anda jawaban yang berbeda karena Anda sudah memiliki jawaban yang dicentang hijau tetapi Anda
menurunkan suara
Sobat Anda tidak dapat membayangkan betapa penderitaan yang Anda selesaikan untuk saya, pengembang sql tidak menerima set define off ketika Anda menjalankan skrip. Ini solusi untuk saya
BrokenFrog
-3

Saya juga mengalami masalah seputar ini. Sesuatu dimulai setiap kali saya mencoba mengatur koneksi ke DB apa pun ..

Apa yang berhasil untuk saya adalah menghapus skrip startup yang mungkin telah Anda konfigurasikan!

yaitu Tools>Preferences...>Databasedan hapus jalur file apa pun yang Anda miliki di kotak teks berlabel "Nama file untuk skrip startup koneksi"!

ufo2mstar
sumber
-3

mematikan pemindaian; Perintah di atas juga berfungsi.

Dinesh Garud
sumber
Ini tidak memberikan jawaban atas pertanyaan tersebut. Untuk mengkritik atau meminta klarifikasi dari seorang penulis, tinggalkan komentar di bawah kiriman mereka - Anda selalu dapat mengomentari kiriman Anda sendiri, dan setelah Anda mendapatkan reputasi yang memadai, Anda akan dapat mengomentari kiriman apa pun. Jika Anda memiliki pertanyaan terkait tetapi berbeda, ajukan pertanyaan baru yang merujuk pada pertanyaan ini jika itu akan membantu memberikan konteks.
Rohan Khude