Dlaczego SQL * PLUS potrzebuje slash po CREATE TYPE?

14

Właśnie miałem problem ze zdefiniowaniem typu i przetestowaniem go w TOAD i wszystko było w porządku. Ale działający pod SQL * PLUS spowodował błąd.

Przykład:

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

Z jakiegoś powodu muszę tutaj dodać ukośnik

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

Dla mnie wygląda podobnie do instrukcji Create Table, która nie wymaga ukośnika. Uważam to za dość mylące. Wiem, jak to działa, ale czy ktoś może wyjaśnić, dlaczego podjęto tę decyzję dotyczącą projektu?

bernd_k
źródło
2
Nie ma pytania Dlaczego nie ma tam odpowiedzi. Wydaje się, że jest to arbitralna decyzja projektowa zespołu sql * plus.
bernd_k
Jest świetna odpowiedź: stackoverflow.com/a/10207695/1568658
Eric Wang

Odpowiedzi:

15

potrzebujesz /po bloku PL / SQL w SQL * Plus:

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

PL/SQL procedure successfully completed

Jest to tak, że SQL * Plus wie, że skończyłeś z instrukcją (która może obejmować pośrednie, nie kończące się ;).

Typy SQL mogą zawierać kod PL / SQL, dlatego deweloperzy SQL * Plus zdecydowali, że będziesz potrzebować /we wszystkich przypadkach po 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

Uwaga : potrzebujesz również /po zdefiniowaniu procedury, pakietu lub treści opakowania (z tego samego powodu).

Vincent Malgrat
źródło