2011-03-24 50 views
5

Tôi có tệp tập lệnh sql tạo bảng và chèn dữ liệu.Sự khác nhau giữa sqlplus và sqldeveloper?

Máy chủ chạy trên Oracle 10g.

Khi tôi sử dụng sqldeveloper (máy tính từ xa) và tôi chạy tất cả mọi thứ kịch bản của tôi là hoàn hảo. Nhưng khi tôi đi trên máy chủ và tôi chạy cùng một kịch bản trên cùng một cơ sở dữ liệu, lược đồ, người dùng với sqlplus một số lỗi xuất hiện (tính toàn vẹn, duy nhất ...)?

Vấn đề là gì, tại sao tôi không gặp sự cố về sqldeveloper nhưng có một số vấn đề về sqlplus? Điều gì có thể gây ra điều đó?

Trả lời

4

Ok tôi đã tìm thấy sự cố:

  • Đầu tiên là những nhận xét (/ * comment */không được hỗ trợ hoặc - nhận xét tại dòng cuối)
  • tôi đã có một số khối ẩn danh trên kịch bản của tôi và tôi đặt một số/tại bắt đầu (bởi lỗi) và kết thúc. Nhưng trên sqlplus,/lúc bắt đầu, thực hiện lại truy vấn trước đó.
  • Sau khi xóa nhận xét tôi có dòng trống trên một số bảng tạo và sqlplus có vấn đề với dòng trống bên trong bảng tạo.
+1

tôi đã cùng vấn đề. Tôi cũng đã có một số câu lệnh kết thúc bằng dấu chấm phẩy và sau đó là dấu gạch chéo (\). SQLPlus sẽ chạy lại câu lệnh, nhưng SQL Developer sẽ không chạy. –

+1

nó cũng có thể giúp thêm nhận xét vào mỗi bảng, do đó/được tạo bởi SQLDeveloper trong xuất, sẽ đứng trước câu lệnh "COMMENT ON TABLE" chứ không phải câu lệnh CREATE TABLE, do đó không có lỗi nào được tạo khi lệnh được thi hành lần thứ hai. Bất kỳ cách nào, tất cả đều rất buồn. – PierluigiVernetto

+0

cũng kiểm tra http://stackoverflow.com/questions/1079949/sql-the-semicolon-or-the-slash. bạn có thể giảm thiểu vấn đề bằng cách sử dụng SQLDeveloper 4 và chơi với tùy chọn "terminator" – PierluigiVernetto

1

Tôi chạy tập lệnh của mình mọi thứ đều hoàn hảo. Nhưng khi tôi đi trên máy chủ và tôi chạy cùng một kịch bản trên cùng một cơ sở dữ liệu, lược đồ, người dùng với sqlplus một số lỗi xuất hiện (tính toàn vẹn, duy nhất ...)?

Dường như tập lệnh của bạn xử lý việc tạo và chèn, nhưng không xóa dữ liệu hiện có. Nếu không có một cái nhìn vào kịch bản của bạn, không có cách nào để nói điều này, nhưng tôi có thể mô phỏng cùng với dữ liệu thử nghiệm của tôi.

test.sql:

create table parts (id number primary key, 
        description varchar2(240) 
        ) 
/

insert into parts values(1,'Keyboard'); 
insert into parts values(2,'Mouse'); 
insert into parts values(3,'Monitor'); 

Chạy script trong SQL Developer:

Run trong SQL * Plus - cùng một người dùng, lược đồ, cơ sở dữ liệu:

SQL> @/home/oracle/Desktop/test.sql 
create table parts (id number primary key, 
      * 
ERROR at line 1: 
ORA-00955: name is already used by an existing object 


insert into parts values(1,'Keyboard') 
* 
ERROR at line 1: 
ORA-00001: unique constraint (HR.SYS_C0016596) violated 


insert into parts values(2,'Mouse') 
* 
ERROR at line 1: 
ORA-00001: unique constraint (HR.SYS_C0016596) violated 


insert into parts values(3,'Monitor') 
* 
ERROR at line 1: 
ORA-00001: unique constraint (HR.SYS_C0016596) violated 
1

vấn đề tôi đã gặp ở một vị trí tương tự:

  • Bất kỳ BEGIN ... END; các khối ngoài phải được theo sau với đường dây /.
  • phẩy không thể có bất cứ điều gì sau khi ra lệnh cho họ
    • this is good;
    • this is bad; -- comment
    • this is bad;;
  • Sql (chọn, chèn vv) không thể có dòng trống ở giữa
    • SELECT 'this is good' FROM Dual
    • SELECT 'this is bad' [empty line with no text] FROM Dual

Cảm ơn các heads-up trên /* multi-line comments */ - Tôi đã nói thêm rằng để kịch bản thử nghiệm của tôi.

0

Chỉ để hoàn thành, có khả năng là Nhà phát triển SQL và sqlplus chạy với các tham số phiên nls khác nhau. Để kiểm tra, hãy chạy lệnh này trong sqlplus và SQL Developer và so sánh kết quả:

SELECT * FROM nls_session_parameters; 

Trong trường hợp có một số khác biệt, bạn có thể thiết lập các nls_session_parameters bạn muốn thông qua một cái gì đó như:

ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/RR'; 
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD/MM/RR HH24:MI:SSXFF'; 
Các vấn đề liên quan