Cách tránh thay thế biến trong Oracle SQL Developer bằng 'trinidad & tobago'


111

Khi tôi cố gắng thực thi câu lệnh này trong Oracle SQL Developer 2.1, một hộp thoại "Nhập biến thay thế" bật lên yêu cầu giá trị thay thế cho TOBAGO ,

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

Làm thế nào tôi có thể tránh điều này mà không cần dùng đến chr(38)hoặc u'trinidad \0026 tobago'cả hai đều che khuất mục đích của tuyên bố?


1
Thật kỳ lạ, khi tôi cố gắng chạy một truy vấn chính xác như vậy trong SQL developer 2.1, tôi không nhận được cửa sổ biến thay thế? (Và các định nghĩa của tôi chắc chắn được đặt thành bật)
wasatz

Câu hỏi này đã giúp tôi rất nhiều.
Oh Chin Boon

Câu trả lời:


191

Gọi cái này trước truy vấn:

set define off;

Ngoài ra, hacky:

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

Từ điều chỉnh SQL * Plus :

SET DEFINE OFF vô hiệu hóa việc phân tích cú pháp các lệnh để thay thế các biến thay thế bằng các giá trị của chúng.


9
Cái gì (khác) set define off;làm gì?
Xonatron

15

Trong SQL * Plus, việc đặt SET DEFINE ?ở đầu tập lệnh sẽ giải quyết được vấn đề này. Cũng có thể làm việc cho Oracle SQL Developer.


2
ĐẶT ĐỊNH NGHĨA? ngăn chặn hành vi thay thế biến trong SQL Developer 2.1. Như đã lưu ý bởi Nick SET DEFINE OFF cũng hoạt động.
Janek Bogucki

bộ xác định các công trình nhưng DBA wont cho phép sử dụng nó đôi khi tôi không biết lý do tại sao
nikhil sugandh

1

điều này sẽ hoạt động như bạn đã yêu cầu mà không có 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';

Câu hỏi của tôi là làm thế nào điều này có thể được thực hiện mà không cần sử dụng chr(38).
Janek Bogucki

@JanekBogucki mang nó nó đúng giờ mà không sử dụng CHAR (38)
nikhil sugandh

tôi đã cho bạn một câu trả lời khác nhau như bạn đã có câu trả lời đánh dấu màu xanh lá cây nhưng bạn downvoted
nikhil sugandh

Bạn không thể tưởng tượng được những gì bạn đã giải quyết cho tôi, nhà phát triển sql không chấp nhận thiết lập xác định khi bạn chạy một tập lệnh. Đây là giải pháp cho tôi
BrokenFrog

-3

Tôi cũng gặp một số vấn đề xung quanh điều này. Có gì đó đang khởi động mỗi khi tôi cố gắng thiết lập kết nối với bất kỳ DB nào ..

Điều phù hợp với tôi là xóa bất kỳ tập lệnh khởi động nào mà bạn có thể đã định cấu hình!

tức là Tools>Preferences...>Databasevà loại bỏ bất kỳ đường dẫn tệp nào mà bạn có trong hộp văn bản có nhãn "Tên tệp cho tập lệnh khởi động kết nối"!


-3

đặt quét tắt; Lệnh trên cũng hoạt động.


Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của chính mình và khi bạn có đủ uy tín, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào. Nếu bạn có một câu hỏi liên quan nhưng khác, hãy đặt một câu hỏi mới liên quan đến câu hỏi này nếu nó sẽ giúp cung cấp ngữ cảnh.
Rohan Khude
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.