¿Cuál es el significado de un punto y coma al final de los comandos SQL * Plus?


16

Algunas declaraciones como crear tabla, insertar en etc. toman un punto y coma al final:

CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn_demo NOT NULL
    ) ;

mientras que a otros les gusta

set echo on
connect system/manager

pasar sin el punto y coma también.

¿Cuál es el razonamiento detrás de esto? ¿Cómo puedo decidir dónde poner el punto y coma y dónde no?


66
+1 Para hacer las cosas más confusas, puede usar / en la siguiente línea en lugar de; en algunos casos.
bernd_k

Respuestas:


15

Los comandos de la instancia local se ejecutan al regresar. Los comandos de varias líneas para el servidor se ejecutan en punto y coma.

Los comandos especiales detallados en el manual de SQL * Plus son los únicos que no aceptan punto y coma. Los comandos SQL de Wheras deben terminar con a ;para ser analizados por el servidor.


El punto y coma al final de un comando es el mismo que una instrucción GO al final de un comando ejecutado en OSQL / SQLCMD en Sql Server. Es la señal de que el comando se analizará y ejecutará.
Marian

7

Cuando ingresa una instrucción SQL en SQL * Plus, necesita saber cuándo ha terminado, especialmente si el comando abarca varias filas. Por lo tanto, requiere un carácter de carácter terminal que se puede establecer con set sqlterminator. Por defecto, este personaje es el punto y coma:

SQL> select *
  2  from
  3  dual;

D
-
X

Ahora, cambiando este carácter de terminal a #:

SQL> set sqlterminator #
SQL> select *
  2  from
  3  dual#

D
-
X

La instrucción SQL finalizó (finalizó ejecutada) con a #.

Usted pregunta: ¿por qué set sqlterminator #no fue seguido por un punto y coma? Respuesta, porque esto no es una declaración SQL. Las declaraciones relacionadas con SQL * Plus y su comportamiento, salida, conexión asf (como set echo ony connect system/manager) no son declaraciones SQL y, por lo tanto, se ingresan sin punto y coma.

¿Qué tiene esto que ver con el /?

Cuando ingresó una instrucción SQL, SQL * plus llenó algo que llama un búfer. Este búfer se puede mostrar con el listcomando:

SQL> list
  1  select *
  2  from
  3* dual
SQL>

(Nota: solo ingresé a la lista , el resto se devuelve)

El /ahora ejecuta lo que está actualmente en el búfer. Probemos eso:

SQL> /

D
-
X

Como se puede ver, se ejecuta la misma consulta.


2

El punto y coma es el punto de secuencia para el analizador SQL, mientras que los comandos que se ejecutan dentro de SQL * Plus se ejecutan inmediatamente de todos modos. Como analogía, compare los puntos y comas en un programa en C con los comandos ingresados ​​en el shell.


0

Según tengo entendido, el analizador de SQL general tiene mucho en común con el analizador de JavaScript general, ya que le gustaría un punto y coma después de cada lugar apropiado, pero no es obligatorio, excepto en ciertas circunstancias. Cuando me enseñaron a escribir SQL, me dijeron que un punto y coma era parte del lenguaje, no un operador adicional que podríamos ignorar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.