2011-03-24 145 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';