为什么SQL * PLUS在CREATE TYPE之后需要一个斜杠?


14

我只是遇到了一个问题,我定义了一个Type并在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 2011年

有一个很好的答案:stackoverflow.com/a/10207695/1568658
Eric Wang

Answers:


15

/在SQL * Plus中的PL / SQL块之后需要一个:

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

注意/在定义过程,包或包主体之后,您还需要一个(出于相同的原因)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.