¿Por qué SQL * PLUS necesita una barra diagonal después de CREATE TYPE?

14

Acabo de tener el problema de que definí un Tipo y lo probé en TOAD y todo estuvo bien. Pero ejecutando bajo SQL * PLUS arrojó un error.

Ejemplo:

CREATE OR REPLACE TYPE MyType AS OBJECT (
    Item1 NUMBER,
    Item2 NUMBER
);

Por alguna razón, tengo que agregar una barra aquí

CREATE OR REPLACE TYPE MyType AS OBJECT (
    Item1 NUMBER,
    Item2 NUMBER
);
/

Para mí, se parece a una instrucción Crear tabla, que no requiere una barra inclinada. Lo encuentro bastante confuso. Sé cómo funciona, pero ¿alguien puede explicar por qué se tomó esta decisión de diseño?

bernd_k
fuente
2
No, la pregunta ¿Por qué no se responde allí? Parece ser una decisión de diseño arbitraria del equipo sql * plus.
bernd_k
Hay una gran respuesta: stackoverflow.com/a/10207695/1568658
Eric Wang

Respuestas:

15

necesita un /bloque PL / SQL después de SQL * Plus:

SQL> begin
  2     null;
  3  end;
  4  -- here you need a /
  5  /

PL/SQL procedure successfully completed

Esto es para que SQL * Plus sepa que ha terminado con su declaración (que podría incluir intermedios, sin terminación ;).

Los tipos de SQL pueden incluir código PL / SQL, por lo tanto, los desarrolladores de SQL * Plus decidieron que necesita /en todos los casos después de CREATE TYPE:

SQL> CREATE OR REPLACE TYPE t AS OBJECT (
  2     x NUMBER,
  3     MEMBER PROCEDURE setx(p_x NUMBER)
  4  );
  5  /

Type created

SQL> CREATE OR REPLACE TYPE BODY t AS
  2     MEMBER PROCEDURE setx (p_x NUMBER) IS
  3     BEGIN
  4        x := p_x;
  5     END;
  6  END;
  7  /

Type body created

Nota : también necesita un /después de definir un procedimiento, un paquete o un cuerpo de paquete (por el mismo motivo).

Vincent Malgrat
fuente