Làm cách nào để bỏ qua dấu và trong tập lệnh SQL chạy từ SQL Plus?


104

Tôi có một tập lệnh SQL tạo một gói có nhận xét 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 dấu và?

Câu trả lời:


181

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

set define off

Nếu không, ký hiệu và cần phải ở cuối một chuỗi,

'StackOverflow &' || ' you'

CHỈNH SỬA: Tôi rất vui khi nhấp chuột khi lưu ... Điều này được tham khảo từ một 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
David Aldridge

Đâ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

Luôn luôn là một giải pháp tiết kiệm cuộc sống :) Cảm ơn.
Anjana Silva

25

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 định nghĩa. 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 thêm nó dưới dạng một ký tự như trong || '&' ||.


Kịch bản cụ thể là một gói có nguồn bao gồm một ký hiệu và trong một nhận xét. Tôi không hiểu 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 nói đúng, tôi chỉ liệt kê điều 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.
Leigh Riffel

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

13

Tôi đã giải quyết bằng mã bên dưới:

set escape on

và đặt \ bên cạnh & ở bên trái 'value_\&_intert'

Att


Điều này đã làm việc cho tôi. Tôi đang sử dụng lệnh comment on column tablename.columnname is 'war ' || chr(38) || ' peace'nhưng nó đã báo cho tôi lỗi ORA-01780: string literal required.
mrswadge

6

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

Theo mặc định, chức năng DEFINE được bật và được đặt thành &

Nó có thể được tắt - như đã đề cập - nhưng nó cũng có thể tránh được bằng cách đặt nó thành một giá trị khác. Hãy biết rõ bạn đã đặt nó ở ký hiệu nào. 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>

1
Tôi đã sử dụng cách tiếp cận này gầ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

set 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 đã thử ...

đặt xác định}

Tôi đã có thể chèn một số bản ghi có chứa ký hiệu và ký tự '&' 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 "set define off" và mọi thứ hoạt động như bình thường.



0

Tôi đã có một câu lệnh CASE với WHEN column = 'sometext & more text' THEN ...

Tôi đã thay thế nó bằng WHEN column = 'sometext' || CHR (38) || 'thêm văn bản' THÌ ...

bạn cũng có thể sử dụng cột KHI NHƯ 'sometext _ more text' THEN ...

(_ là ký tự đại diện cho một ký tự)

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.