Чому 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, який не вимагає нахилу. Я вважаю це досить заплутаним. Я знаю, як це працює, але чи може хтось пояснити, чому було прийнято таке дизайнерське рішення?



2
Немає питання Чому на нього не відповідають. Здається, це довільне дизайнерське рішення команди sql * plus.
bernd_k

Є чудова відповідь: stackoverflow.com/a/10207695/1568658
Eric Wang

Відповіді:


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 вирішили, що вам потрібно створити /в усіх випадках після ТВОРЧОГО ТИПУ:

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

Примітка : вам також потрібно мати /після того, як ви визначите процедуру, пакет або тіло пакету (з тієї ж причини).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.