Mengapa SQL * PLUS perlu garis miring setelah BUAT TYPE?

14

Saya baru saja mengalami masalah yang saya mendefinisikan Jenis dan mengujinya dalam TOAD dan semuanya OK. Tetapi berjalan di bawah SQL * PLUS itu melemparkan kesalahan.

Contoh:

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

Untuk beberapa alasan saya harus menambahkan garis miring di sini

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

Bagi saya itu mirip dengan pernyataan Buat Tabel, yang tidak memerlukan garis miring. Saya merasa agak membingungkan. Saya tahu cara kerjanya, tetapi adakah yang bisa menjelaskan mengapa keputusan desain ini dibuat?

bernd_k
sumber
2
Tidak pertanyaan Mengapa tidak dijawab di sana. Tampaknya menjadi keputusan desain yang sewenang-wenang dari tim sql * plus.
bernd_k
Ada jawaban yang bagus: stackoverflow.com/a/10207695/1568658
Eric Wang

Jawaban:

15

Anda memerlukan /setelah blok PL / SQL di SQL * Plus:

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

PL/SQL procedure successfully completed

Ini agar SQL * Plus tahu bahwa Anda sudah selesai dengan pernyataan Anda (yang bisa termasuk perantara, non-terminasi ;).

Jenis SQL dapat menyertakan kode PL / SQL, oleh karena itu SQL * Plus devs memutuskan bahwa Anda memerlukan /dalam semua kasus setelah 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

Catatan : Anda juga perlu /setelah menentukan prosedur, paket, atau badan paket (untuk alasan yang sama).

Vincent Malgrat
sumber