2011-03-24 58 views
5

我有一個sql腳本文件,它創建表並插入數據。sqlplus和sqldeveloper的區別?

服務器在Oracle 10g上運行。

當我使用sqldeveloper(遠程計算機)並運行我的腳本時,一切都很完美。但是,當我在服務器上,並在相同的數據庫,架構上運行相同的腳本,出現sqlplus用戶出現一些錯誤(完整性,唯一...)?

問題是什麼,爲什麼我在sqldeveloper上沒有問題,但在sqlplus上有一些問題?什麼會導致這種情況?

回答

4

好我發現問題:

  • 首先是註釋(/ *註釋* /不支持或 - 在最後行註釋)
  • 我對我的腳本一些匿名塊,我把一些/在開始(由錯誤)和結束。但在sqlplus上,在開始處,重新執行上一個查詢。
  • 刪除評論後,我得到了一些創建表上的空白行,並且sqlplus在創建表內的空白行時出現問題。
+1

我有同樣的問題。我也有一些以分號結尾,然後是斜槓(\)的陳述。 SQLPlus將重新運行該語句,但SQL Developer不會。 – 2012-09-12 03:05:32

+1

它還可以幫助爲每個表添加註釋,以便由SQLDeveloper在導出中生成的/將位於「COMMENT ON TABLE」語句之前,而不是CREATE TABLE語句之前,因此執行此命令時不會生成錯誤第二次。任何方式都很傷心。 – PierluigiVernetto 2014-09-01 08:47:06

+0

也檢查http://stackoverflow.com/questions/1079949/sql-the-semicolon-or-the-slash。您可以使用SQLDeveloper 4並使用「終止符」選項來緩解該問題 – PierluigiVernetto 2014-09-01 09:13:36

1

我運行我的腳本一切都很完美。但是,當我在服務器上,我運行相同的數據庫,架構同一腳本,sqlplus用戶出現一些錯誤(完整性,獨特的...)?

看起來好像您的腳本處理創建和插入操作,但不會刪除現有數據。沒有看看你的腳本,沒有辦法告訴它,但我可以用我的測試數據來模擬。

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'); 

運行在SQL Developer中的腳本:

在SQL * Plus運行 - 相同的用戶,架構,數據庫:

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

問題我有一個類似的立場遇到:

  • 任何BEGIN ... END;外部塊必須遵循/行。
  • 分號不能有任何東西他們
    • this is good;
    • this is bad; -- comment
    • this is bad;;
  • SQL命令後(SELECT,INSERT等),不能有空白行中間
    • SELECT 'this is good' FROM Dual
    • SELECT 'this is bad' [empty line with no text] FROM Dual

感謝在/* multi-line comments */擡頭 - 我添加了我的測試腳本。

0

只是爲了完整性,SQL Developer和sqlplus很可能運行不同的nls會話參數。要檢查,運行在sqlplus和SQL Developer的這個命令並比較結果:

SELECT * FROM nls_session_parameters; 

萬一有一些區別,你可以通過類似設置你想要的nls_session_parameters:

ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/RR'; 
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD/MM/RR HH24:MI:SSXFF';