2011-03-24 26 views
5

Tengo un archivo de script sql que crea tablas e inserta datos.¿Diferencia entre sqlplus y sqldeveloper?

El servidor se ejecuta en Oracle 10g.

Cuando uso sqldeveloper (computadora remota) y ejecuto mi script todo es perfecto. Pero cuando voy al servidor y ejecuto el mismo script en la misma base de datos, schema, user con sqlplus aparece algún error (integridad, único ...)?

¿Cuál es el problema, por qué no tuve un problema en sqldeveloper pero tuve algunos en sqlplus? ¿Qué puede causar eso?

Respuesta

4

Ok encontré los problemas:

  • El primero fue el comentario (/ * comentario */no se admiten o - comentario en la línea final)
  • tuve algún bloque anónimo en mi guión y me puse un poco de/en el inicio (por error) y el final. Pero en sqlplus, el/al comienzo, vuelve a ejecutar la consulta anterior.
  • Después de eliminar el comentario, obtuve una línea en blanco en alguna tabla de creación y sqlplus tiene un problema con la línea en blanco dentro de la tabla de creación.
+1

que tenía la misma problema. También tuve algunas declaraciones que terminan en un punto y coma y luego seguidas por una barra inclinada (\). SQLPlus volvería a ejecutar la declaración, pero SQL Developer no lo haría. –

+1

también puede ayudar agregar un comentario a cada tabla, para que/generado por SQLDeveloper en la exportación, preceda una declaración "COMMENT ON TABLE" en lugar de una declaración CREATE TABLE, por lo que no se genera ningún error cuando se ejecuta el comando la segunda vez. De todos modos, todo es muy triste. – PierluigiVernetto

+0

compruebe también http://stackoverflow.com/questions/1079949/sql-the-semicolon-or-the-slash. puedes mitigar el problema usando SQLDeveloper 4 y jugando con la opción "terminador" – PierluigiVernetto

1

Ejecuto mi script todo es perfecto. Pero cuando voy al servidor y ejecuto el mismo script en la misma base de datos, schema, user con sqlplus aparece algún error (integridad, único ...)?

parecería que el script se encarga de la creación e inserción, pero no la supresión de los datos existentes. Sin echarle un vistazo a su script, no hay forma de decirlo, pero puedo simular lo mismo con mis datos de prueba.

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

ejecutar el script en SQL Developer:

Ejecutar en SQL * Plus - el usuario mismo, el esquema de base de datos:

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

problemas que he encontrado en una situación similar:

  • Cualquier begin ... end; los bloques externos se deben seguir con una línea /.
  • punto y coma no puede tener nada después les ordena
    • this is good;
    • this is bad; -- comment
    • this is bad;;
  • SQL (SELECT, INSERT, etc.) no pueden tener líneas vacías en medio
    • SELECT 'this is good' FROM Dual
    • SELECT 'this is bad' [empty line with no text] FROM Dual

Gracias por el heads-up en el /* multi-line comments */ - He agregó que a mi escritura de la prueba.

0

Para completar, es bastante posible que SQL Developer y sqlplus se ejecuten con diferentes parámetros de sesión nls. Para comprobar, ejecute este comando en sqlplus y SQL Developer y comparar los resultados:

SELECT * FROM nls_session_parameters; 

En caso de que haya alguna diferencia puede establecer las nls_session_parameters que desee a través de algo como:

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