Tôi có một tập lệnh SQL để tạo một gói với một chú thích có chứa dấu và (&). Khi tôi chạy tập lệnh từ SQL Plus, tôi được nhắc nhập giá trị thay thế cho chuỗi bắt đầu bằng &. Làm cách nào để tắt tính năng này để SQL Plus bỏ qua ký hiệu và?Làm cách nào để bỏ qua các ký hiệu trong một tập lệnh SQL chạy từ SQL Plus?
Trả lời
Đ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.
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.
Thoát sau dấu chéo không hoạt động trong SQL * Plus hoặc SQLDeveloper –
@JimTough Sau khi kích hoạt nó bằng 'đặt thoát trên ' –
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 || '&' ||
.
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
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. –
Nó thực sự đã giúp tôi. –
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
Đ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
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>
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
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.
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 –
Đâ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