Warum benötigt SQL * PLUS nach CREATE TYPE einen Schrägstrich?

14

Ich hatte gerade das Problem, dass ich einen Typ definiert und in TOAD getestet habe und alles in Ordnung war. Aber unter SQL * PLUS warf es einen Fehler.

Beispiel:

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

Aus irgendeinem Grund muss ich hier einen Schrägstrich einfügen

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

Für mich ähnelt es einer Create Table-Anweisung, für die kein Schrägstrich erforderlich ist. Ich finde es ziemlich verwirrend. Ich weiß, wie es funktioniert, aber kann jemand erklären, warum diese Entwurfsentscheidung getroffen wurde?

bernd_k
quelle
2
Nein die Frage warum wird da nicht beantwortet. Es scheint eine willkürliche Designentscheidung des sql * plus-Teams zu sein.
bernd_k
Es gibt eine großartige Antwort: stackoverflow.com/a/10207695/1568658
Eric Wang

Antworten:

15

Sie benötigen einen /nach einem PL / SQL-Block in SQL * Plus:

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

PL/SQL procedure successfully completed

Dies ist der Grund dafür, dass SQL * Plus weiß, dass Sie mit Ihrer Anweisung fertig sind (einschließlich zwischengeschalteter, nicht terminierender Anweisungen ;).

SQL-Typen können PL / SQL-Code enthalten. Daher haben die SQL * Plus-Entwickler entschieden, dass Sie /in allen Fällen nach einem CREATE TYPE Folgendes benötigen :

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

Hinweis : /Nachdem Sie eine Prozedur, ein Paket oder einen Paketkörper definiert haben, benötigen Sie (aus dem gleichen Grund) auch ein.

Vincent Malgrat
quelle