Зачем SQL * PLUS косая черта после CREATE TYPE?

14

У меня просто была проблема, что я определил тип и проверил его в TOAD, и все было в порядке. Но при работе под SQL * PLUS это выдало ошибку.

Пример:

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

По какой-то причине я должен добавить слеш здесь

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

Для меня это похоже на оператор Create Table, который не требует косой черты. Я нахожу это довольно запутанным. Я знаю, как это работает, но кто-нибудь может объяснить, почему было принято это дизайнерское решение?

bernd_k
источник
ответил в: dba.stackexchange.com/questions/1305/…
Джо
2
Нет вопроса Почему там нет ответа. Кажется, это произвольное дизайнерское решение команды sql * plus.
bernd_k
Есть отличный ответ: stackoverflow.com/a/10207695/1568658
Эрик Ван

Ответы:

15

вам нужно /после PL / SQL блока в SQL * Plus:

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

PL/SQL procedure successfully completed

Это так, что SQL * Plus знает, что вы закончили с вашим оператором (который может включать промежуточный, не завершающий ;).

Типы SQL могут включать код PL / SQL, поэтому разработчики SQL * Plus решили, что вам нужно /во всех случаях после 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

Примечание : вам также понадобится /после определения процедуры, пакета или тела пакета (по той же причине).

Винсент Малграт
источник