Saltar al contenido

¿Cuándo necesito usar un punto y coma frente a una barra en Oracle SQL?

Solución:

Sé que este es un hilo antiguo, pero me encontré con él y siento que no se ha explicado completamente.

Existe una gran diferencia en SQL * Plus entre el significado de un / y un ; porque funcionan de manera diferente.

los ; finaliza una sentencia SQL, mientras que el / ejecuta lo que esté en el “búfer” actual. Entonces, cuando usas un ; y a / la declaración se ejecuta en realidad dos veces.

Puede ver fácilmente que usando un / después de ejecutar una declaración:

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:37:20 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and OLAP options

SQL> drop table foo;

Table dropped.

SQL> /
drop table foo
           *
ERROR at line 1:
ORA-00942: table or view does not exist

En este caso, uno se da cuenta del error.

Pero suponiendo que haya un script SQL como este:

drop table foo;
/

Y esto se ejecuta desde SQL * Plus, entonces esto será muy confuso:

SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 18 12:38:05 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning and OLAP options

SQL> @drop

Table dropped.

drop table foo
           *
ERROR at line 1:
ORA-00942: table or view does not exist

los / se requiere principalmente para ejecutar sentencias que tienen incrustadas ; como un CREATE PROCEDURE declaración.

Quería aclarar un poco más el uso entre los ; y el /

En SQLPLUS:

  1. ; significa “terminar la declaración actual, ejecutarla y almacenarla en el búfer SQLPLUS”
  2. <newline> después de una declaración DML (SELECT, UPDATE, INSERT, …) o algunos tipos de declaraciones DDL (Creación de tablas y vistas) (que no contienen ;), es decir, almacene la declaración en el búfer pero no la ejecute.
  3. / después de ingresar una declaración en el búfer (con un espacio en blanco <newline>) significa “ejecutar DML o DDL o PL / SQL en el búfer.
  4. RUN o R es un comando sqlsplus para mostrar / generar el SQL en el búfer y ejecutarlo. No terminará una instrucción SQL.
  5. / durante la entrada de un DML o DDL o PL / SQL significa “terminar la declaración actual, ejecutarla y almacenarla en el búfer SQLPLUS”

NOTA: Porque ; se utilizan para PL / SQL para finalizar una declaración ; SQLPLUS no puede usarlo para significar “terminar la declaración actual, ejecutarla y almacenarla en el búfer SQLPLUS” porque queremos que todo el bloque PL / SQL esté completamente en el búfer y luego ejecutarlo. Los bloques PL / SQL deben terminar con:

END;
/

Es una cuestión de preferencia, pero prefiero ver scripts que usan constantemente la barra; de esta manera, todas las “unidades” de trabajo (crear un objeto PL / SQL, ejecutar un bloque anónimo PL / SQL y ejecutar una declaración DML) pueden ser detectado más fácilmente a simple vista.

Además, si finalmente se cambia a algo como Ant para la implementación, simplificará la definición de objetivos para tener un delimitador de declaración coherente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *