2011-08-18 38 views
17

Tôi đang thử một câu lệnh INSERT đơn giản đối với một cơ sở dữ liệu Oracle. Một trong các giá trị là trường VARCHAR2 và câu lệnh chèn chứa ký hiệu và. Làm thế nào để tôi làm điều này? Tôi đã thử các phương pháp sau:Các ký tự thoát và trong PL/SQL Developer

  1. Thoát khỏi & như \ & với bộ thoát trên
  2. bộ quét tắt (điều này gây ra một ORA-00.922 thiếu hoặc lỗi tùy chọn không hợp lệ)
  3. bộ xác định tắt (điều này gây ra lỗi tùy chọn thiếu hoặc không hợp lệ ORA-00922)

Bất kỳ ý tưởng nào khác?

+3

Tôi đã "giải quyết" nó bằng cách sử dụng giải pháp chr (38) trong câu hỏi này: http://stackoverflow.com/questions/1137354/oracle-pl-sql-escape-character-for-a nhưng muốn một cái gì đó duyên dáng hơn. –

+0

Bạn đang cố gắng thực hiện chèn thông qua một cửa sổ SQL hoặc một cửa sổ lệnh? –

+0

Ray, bạn đã thử đặt định nghĩa cho một ký tự khác thay vì chỉ thiết lập nó hoàn toàn? Không chắc chắn nếu nó sẽ giúp đỡ như tôi không sử dụng PLSQL Developer nhưng nó có thể ... – Ollie

Trả lời

21

Cách tôi giải quyết nó đang thoát khỏi & bằng một & khác.

Ví dụ:

INSERT INTO Foo (Bar) VALUES ('Up && Away'); 

Làm việc độc đáo. Cảm ơn tất cả sự giúp đỡ

+0

thực sự, nhưng hãy cẩn thận không thay thế "&" bằng "&&" bằng công cụ tìm kiếm gốc và thay thế plsqld, vì nó có thể nhập một vòng lặp vô hạn. – roselan

+1

Không phải cho tôi ... giải pháp của tôi là câu trả lời "... INSERT INTO tablex VALUES ('Sid' || '&' || 'Nancy'); ..." –

+0

cũng không có tác dụng với tôi. – th1rdey3

8

Bạn đã thử một cái gì đó như thế này chưa?

INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy'); 

Cải thiện câu trả lời đầu tiên của tôi, vấn đề của bạn có liên quan với PL/SQL Developer. Nếu bạn thực thi khối của mình trong cửa sổ Lệnh PL/SQL Developer, bạn cũng có thể sử dụng SET DEFINE OFF chuẩn, hoạt động giống như trong SQL * Plus.

+0

Tôi không nghĩ rằng đó là bất kỳ duyên dáng hơn so với giải pháp 'chr (38)' Ray đề cập đến. – APC

+0

có thể được, nhưng đó là cái mà tôi đã sử dụng khi tôi đối mặt với một vấn đề tương tự cách đây một năm. Trong http://www.orafaq.com/wiki/SQL_FAQ có một số giải pháp tốt đẹp quá trong SQL * Plus, như SET ESCAPE '\', SET DEFINE ~ hoặc SET SCAN OFF – Aitor

+1

Giải pháp tốt đẹp và dễ chịu hơn không quan trọng với cài đặt chung . Một chút ngắn hơn: 'Sid &' || 'Nancy'. –

12

Một trong những tính năng của Nhà phát triển PL/SQL cần có thời gian để làm quen với nhiều loại cửa sổ khác nhau.

Một trong số đó là cửa sổ COMMAND, cơ bản là trình giả lập SQL * Plus. Chúng ta có thể chạy các lệnh SQL * Plus cũng như SQL, do đó, SET ESCAPE, SET DEFINE và thực sự là SET SCAN OFF hoạt động trong cửa sổ đó.

4

các concat làm việc hoàn toàn tốt đẹp đối với tôi dưới đây là những gì tôi đã làm trong tuyên bố chọn của tôi:

select FUND_NM 
FROM PERFORMANCE 
WHERE upper(FUND_DESC) in ('My L&' ||'L FUNDS') 
2

tôi sử dụng chr(38) nơi tôi cần một dấu trong PL/SQL.

addr:= 'mysite.com/order.aspx?no=5678' || CHR(38) || 'id=947'; 
--above line gives you 'mysite.com/order.aspx?no=5678&id=947'; 
12

Phiên bản hiện tại của PL/SQL Developer (11.0.x) có nút để tắt/bật biến thay thế.

enter image description here

+0

Rất khó tìm. Tôi đã dành 10 phút duyệt qua tất cả các tùy chọn trong cài đặt và chỉ sau đó tìm thấy trực tuyến này. –

0

Đây chỉ là vấn đề về SQL Editor. Để giải quyết điều này chỉ cần biên dịch các thủ tục với SET DEFINE OFF; . Thực thi là PL (thực thi trong máy chủ) sẽ không gặp vấn đề này.

Các vấn đề liên quan