Ký tự thoát trong Oracle SQL (cho một '&')


86

Trong khi cố gắng thực thi các câu lệnh chèn SQL bằng Oracle SQL Developer, tôi tiếp tục tạo ra lời nhắc "Nhập giá trị thay thế":

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

Tôi đã thử thoát ký tự đặc biệt trong truy vấn bằng cách sử dụng '\' ở trên nhưng tôi vẫn không thể tránh được dấu và '&', gây ra sự thay thế chuỗi.

Câu trả lời:


125

& là giá trị mặc định cho DEFINE, cho phép bạn sử dụng các biến thay thế. Tôi muốn tắt nó bằng cách sử dụng

ĐẶT TẮT ĐỊNH NGHĨA

thì bạn sẽ không phải lo lắng về việc thoát hoặc CHR (38).


60

|| chr(38) ||

Giải pháp này là hoàn hảo.


2
Điều này hoàn thành công việc, nhưng hơi rắc rối khi xử lý các chuỗi tồn tại từ trước.
aglassman

Đối với tôi SET DEFINE OFF không hoạt động. Giải pháp của bạn sẽ hiệu quả. Cảm ơn bạn ...
Ashok kumar

31

Đặt ký tự xác định thành ký tự khác ngoài &

ĐẶT ĐỊNH NGHĨA ~
tạo bảng blah (x varchar (20));
chèn vào các giá trị blah (x) ('blah & amp');
chọn * từ blah;

X                    
-------------------- 
blah & amp 


27
hoặc ĐẶT TẮT
ĐỊNH NGHĨA

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

Cảm ơn Jeffrey Kemp đã cung cấp giải pháp với || chr (38) ||

Đây là một giải pháp chung tốt hơn nhiều, không phụ thuộc vào đặc quyền của người dùng (tức là khi người dùng không được phép TẮT ĐỊNH NGHĨA) và khi người dùng muốn chỉ định cả ký hiệu và trong văn bản và các biến được xác định trong cùng một lệnh SQL.
Phân tích mờ


4

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


Dấu và chỉ cần ở cuối chuỗi, tiết kiệm một nửa phần nối. select 'one&' || 'two' from dual
durette

1

Câu trả lời thực sự là bạn cần đặt ký tự thoát thành '\': SET ESCAPE ON

Sự cố có thể đã xảy ra vì tính năng thoát đã bị tắt hoặc ký tự thoát được đặt thành thứ gì đó khác với '\'. Câu lệnh trên sẽ cho phép thoát đặt nó thành '\'.


Không có câu trả lời nào khác được đăng trước đây thực sự trả lời câu hỏi ban đầu. Tất cả đều giải quyết vấn đề nhưng không giải quyết được nó.


4
Tôi đọc trên Ask Tom ( asktom.oracle.com/pls/asktom/… ) rằng "SET ESCAPE là một chủ nghĩa sqplus". Vì vậy, đây sẽ chỉ là câu trả lời thực sự nếu câu hỏi là về SQL * Plus.
Karl Kieninger

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.