Perché SQL * PLUS necessita di una barra dopo CREATE TYPE?


14

Ho appena avuto il problema che ho definito un tipo e testato in TOAD e tutto era OK. Ma in esecuzione con SQL * PLUS ha generato un errore.

Esempio:

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

Per qualche motivo devo aggiungere una barra qui

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

A me sembra simile a un'istruzione Crea tabella, che non richiede una barra. Lo trovo piuttosto confuso. So come funziona, ma qualcuno può spiegare perché questa decisione di progettazione è stata presa?



2
No alla domanda Perché non c'è risposta lì. Sembra essere una decisione di progettazione arbitraria del team sql * plus.
bernd_k

Risposte:


15

è necessario un /dopo un blocco PL / SQL in SQL * Plus:

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

PL/SQL procedure successfully completed

Questo è così SQL * Plus sa che hai finito con la tua dichiarazione (che potrebbe includere intermedi, non terminanti ;).

I tipi di SQL possono includere il codice PL / SQL, pertanto gli sviluppatori SQL * Plus hanno deciso che è necessario /in tutti i casi dopo un 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 : è necessario anche un /dopo aver definito una procedura, un pacchetto o un corpo del pacchetto (per lo stesso motivo).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.