2009-04-28 8 views
6

tôi viết:Tại sao ORACLE không cho phép các ký tự dòng mới liên tiếp trong các lệnh?

  • : CREATE TABLE Person (
  • : Tên CHAR (10),
  • :
  • : SSN INTEGER);

và lưu nó vào một tập tin "a.sql" (dấu hai chấm đại diện đầu dòng, không có trong mã thực tế.)

Nếu tôi sau đó chạy nó bằng cách gõ "@a" trong SQL * Thêm dấu nhắc lệnh, nó sẽ cho tôi biết rằng dòng bắt đầu bằng "ssn" không được nhận dạng dưới dạng lệnh và bị bỏ qua.

Từ những gì tôi thu thập, có vẻ như sqlplus chấm dứt lệnh nếu nó gặp nhiều ký tự dòng mới trong một hàng. Đây có phải là một tuyên bố chính xác không? Nếu vậy, có ai biết nếu điều này là cần thiết/tại sao nó chọn để làm điều này?

Trả lời

15

Tôi không biết lý do tại sao, nhưng một dòng hoàn toàn trống chấm dứt một lệnh trong SQL * Plus.

Trích từ the SQL*Plus docs:

Kết thúc một lệnh SQL: Bạn có thể kết thúc một lệnh SQL theo một trong ba cách sau:

  • bằng dấu chấm phẩy (;)
  • với một dấu gạch chéo (/) trên một dòng của chính nó
  • với một dòng trống

Bạn cũng có thể thay đổi cách trống đường được điều trị bằng SQLBLANKLINES SET

SQLBL [ANKLINES] {ON | OFF}

Controls liệu SQL * Plus cho phép các dòng trống trong một lệnh SQL hoặc kịch bản. ON giải thích các dòng trống và các dòng mới như một phần của một lệnh hoặc tập lệnh SQL. TẮT, giá trị mặc định, không cho phép các dòng trống hoặc dòng mới trong lệnh hoặc tập lệnh hoặc tập lệnh SQL.

Nhập BLOCKTERMINATOR để dừng mục nhập lệnh SQL mà không cần chạy lệnh SQL. Nhập ký tự SQLTERMINATOR để dừng mục nhập lệnh SQL và chạy câu lệnh SQL.

5

Theo mặc định, SQLPlus không chấm dứt (nhưng không thực thi) một câu lệnh khi một dòng trống được nhập. Nó luôn luôn làm điều này. Nó có thể có vẻ như là một ý tưởng tốt trong những ngày trước khi biên tập viên màn hình và các công cụ truy vấn.

Bạn có thể thay đổi điều đó hành vi mặc định với

bộ SQLBLANKLINES trên

Trong trường hợp này bạn sẽ phải nhập một dòng chỉ với một dấu chấm để chấm dứt (nhưng không thực hiện) một tuyên bố.

0

Nhưng nếu bạn đang muốn chèn văn bản nhiều dòng trong một varchar2 hoặc một lĩnh vực clob, bạn có thể sử dụng chr (10)

insert into t values ('Hello,'||chr(10)||chr(10)||' How are you?'); 

insert into t values (
'Hello, 

How are you'); 

sẽ không làm việc vì những lý do giải thích ở trên.