2008-09-22 34 views

Trả lời

144

Điều này có thể làm việc cho bạn:

set define off 

Nếu không dấu và cần phải được ở phần cuối của một chuỗi,

'StackOverflow &' || ' you' 

EDIT: Tôi đã nhấp hạnh phúc khi lưu ... Đây được tham chiếu từ một số blog.

+2

Bạn cũng có thể chỉ định điều này trong tệp thiết lập hồ sơ trang web glogin.sql hoặc tệp thiết lập hồ sơ người dùng login.sql –

+0

Đây là giải pháp đơn giản nhất nếu bạn không quan tâm đến các biến thay thế. – Drumbeg

2

Theo this nice FAQ có một vài giải pháp.

Bạn cũng có thể thoát khỏi dấu và với ký tự gạch chéo \ nếu bạn có thể sửa đổi nhận xét.

+2

Thoát sau dấu chéo không hoạt động trong SQL * Plus hoặc SQLDeveloper –

+0

@JimTough Sau khi kích hoạt nó bằng 'đặt thoát trên ' –

21

Nếu đôi khi bạn sử dụng các biến thay thế, bạn có thể không muốn tắt xác định. Trong những trường hợp này, bạn có thể chuyển đổi dấu và từ số tương đương của nó như trong || Chr(38) || hoặc nối nó dưới dạng một ký tự đơn lẻ như trong || '&' ||.

+0

Kịch bản cụ thể là gói có nguồn bao gồm dấu và trong nhận xét. Tôi không thấy làm thế nào tôi sẽ sử dụng nối hoặc thay thế cho điều này. – JoshL

+0

JoshL, bạn là chính xác tôi chỉ liệt kê này cho đầy đủ. Nó liên quan đến câu hỏi của bạn mặc dù nó không trực tiếp trả lời câu hỏi cụ thể của bạn. –

+0

Nó thực sự đã giúp tôi. –

8

tôi giải quyết với mã bên dưới:

set escape on 

và đặt một \ cạnh & trong trái 'value_\&_intert'

ATT

+0

Điều này làm việc cho tôi. Tôi đã sử dụng lệnh 'bình luận trên cột tablename.columnname là' chiến tranh '|| chr (38) || 'peace'' nhưng nó đã cho tôi lỗi' ORA-01780: chuỗi chữ bắt buộc'. – mrswadge

4

Bạn có thể thiết lập các ký tự đặc biệt, mà là nhìn cho khi thực hiện của một tập lệnh, với một giá trị khác bằng cách sử dụng SET DEFINE <1_CHARACTER>

Theo mặc định, DEFI Bản thân chức năng NE đang bật và được đặt thành &

Có thể tắt chức năng này - bằng cách đặt giá trị này thành giá trị khác. Hãy rất ý thức về những dấu hiệu bạn đặt nó. Trong ví dụ dưới đây, tôi đã chọn ký tự #, nhưng lựa chọn đó chỉ là một ví dụ.

SQL> select '&var_ampersand #var_hash' from dual; 
Enter value for var_ampersand: a value 

'AVALUE#VAR_HASH' 
----------------- 
a value #var_hash 

SQL> set define # 
SQL> r 
    1* select '&var_ampersand #var_hash' from dual 
Enter value for var_hash: another value 

'&VAR_AMPERSANDANOTHERVALUE' 
---------------------------- 
&var_ampersand another value 

SQL> 
+0

Gần đây tôi đã sử dụng phương pháp này. Tôi thích nó vì nó không yêu cầu tôi thay đổi nội dung của các gói PL/SQL của tôi. – Drumbeg

3

bộ xác định tắt < - Đây là giải pháp tốt nhất mà tôi tìm thấy

Tôi cũng đã cố gắng ...

bộ xác định}

tôi đã có thể chèn nhiều hồ sơ có chứa ký tự dấu và '&' nhưng tôi không thể sử dụng ký tự '}' vào văn bản Vì vậy, tôi đã quyết định sử dụng "đặt định nghĩa tắt" và mọi thứ hoạt động như mong muốn.

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