2015-12-17 19 views
34

Tôi đang xem một Script trong Oracle và tôi thấy một cái gì đó tôi không nhận raKhi hay Tại sao phải sử dụng một "thiết lập DEFINE OFF" trong Oracle Database

REM INSERTING into database1."Users" 
SET DEFINE OFF; 
Insert into database1."Users" ("id","right") values ('1','R'); 

Tôi đang tìm tài liệu về "thiết lập xác định tắt "và theo nghĩa đen là viết" vô hiệu hóa phân tích lệnh để thay thế biến thay thế bằng giá trị của chúng "

Tôi không thực sự hiểu những gì họ muốn nói.

Có ai có thể giúp tôi không?

+1

sẽ tắt nhắc các biến thay thế. do đó bạn không được nhắc chèn giá trị khi nó thấy biến thay thế của bạn, tôi tin rằng mặc định là &. –

+0

Đây là cài đặt cho SQL _client_, không phải là chính cơ sở dữ liệu. Và do đó nó được ghi lại trong sách hướng dẫn SQL * Plus: http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve040.htm#SQPUG073 –

Trả lời

58

Theo mặc định, SQL Plus xử lý '&' làm ký tự đặc biệt bắt đầu chuỗi thay thế. Điều này có thể gây ra vấn đề khi chạy kịch bản đó xảy ra để bao gồm '&' vì những lý do khác:

SQL> insert into customers (customer_name) values ('Marks & Spencers Ltd'); 
Enter value for spencers: 
old 1: insert into customers (customer_name) values ('Marks & Spencers Ltd') 
new 1: insert into customers (customer_name) values ('Marks Ltd') 

1 row created. 

SQL> select customer_name from customers; 

CUSTOMER_NAME 
------------------------------ 
Marks Ltd 

Nếu bạn biết kịch bản của bạn bao gồm (hoặc có thể bao gồm) dữ liệu có chứa '&' nhân vật, và bạn không muốn thay thế hành vi như trên, sau đó sử dụng set define off để tắt hành vi trong khi chạy kịch bản:

SQL> set define off 
SQL> insert into customers (customer_name) values ('Marks & Spencers Ltd'); 

1 row created. 

SQL> select customer_name from customers; 

CUSTOMER_NAME 
------------------------------ 
Marks & Spencers Ltd 

Bạn có thể muốn thêm set define on ở phần cuối của kịch bản để khôi phục lại các hành vi mặc định.

8

Dưới đây là ví dụ:

SQL> set define off; 
SQL> select * from dual where dummy='&var'; 

no rows selected 

SQL> set define on 
SQL>/
Enter value for var: X 
old 1: select * from dual where dummy='&var' 
new 1: select * from dual where dummy='X' 

D 
- 
X 

Với set define off, phải mất một hàng với giá trị &var, nhắc người dùng nhập giá trị cho nó và thay thế &var với giá trị nhập (trong trường hợp này, X) .

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