Oracle SQL 开发人员将我的评论视为命令

Oracle SQL Developer treats my comment as a command

我创建了一些非常基本的 SQL 脚本:

/*
  Change date format
*/
alter session set nls_date_format='DD/MM/YYYY';

/*
  Drop old tables (if exists)
*/
DROP TABLE Students;

/*
  Create new tables
*/
CREATE TABLE Students
  (
    Id NUMBER(6) PRIMARY KEY,
    LastName VARCHAR2(20),
    FirstName VARCHAR2(10),
    Address VARCHAR2(10),
    BirthDay DATE,
    GroupId NUMBER(3)
  );

/*
  Check the table was created successfully
*/
DESC Students;

/*
  Insert a new record to the table
*/
INSERT INTO Students VALUES(101, 'Solin', 'Dan', 'Beer-Sheva', '01/02/1985', 11);

/*
  Check the record was inserted succesfully
*/
SELECT * FROM Students;

/*
  Add 'AvgMark' field to the table with default of 0
*/
ALTER TABLE Students ADD AvgMark NUMBER(5,2) DEFAULT 0;

/*
  Check that the new field was added
*/
DESC Students; 

/*
  Insert 3 new records to the table
*/
INSERT INTO Students VALUES(102, 'Tal', 'Ruti', 'Tel-Aviv', '10/07/1988', 12, 70);
INSERT INTO Students VALUES(103, 'Kohen', 'Yossi', 'Dimona', '01/08/1987', 11, 80);
INSERT INTO Students VALUES(104, 'Toys', 'Vered', 'Tel-Aviv', '15/09/1988', 12, 90);

/*
  Check the records were inserted succesfully
*/
SELECT * FROM Students;

/*
  Change 'Address' data type to VARCHAR2(15)
*/
ALTER TABLE Students MODIFY Address VARCHAR2(15);

/*
  Check that the data type has changed
*/
DESC Students; -- Some comment

Script Output 结束时,我收到此错误消息: ERROR: object COMMENT does not exist

如果我将评论更改为 Hello World 我会得到与 WORLD 相同的错误 "object"...

我改变了整个脚本以避免单行注释,结果是一样的。

我可以在这个例子中再次避免它,但我真的很想了解是什么导致了这个奇怪的问题...


另一件可能有助于解决问题的事情是我在同一个脚本中遇到的另一个奇怪的错误,注释上方几行。在这一行: ALTER TABLE Students MODIFY Address VARCHAR2(15);

SQL 开发人员在最后两个字符(右括号和分号)下显示错误 Syntax error. Partially recognized rules (Railroad diagrams): ...

如果我运行声明它会工作得很好...

--\* *\REM 在 SQL*Plus 脚本中都可以,但有几个限制。 https://docs.oracle.com/cd/B10501_01/server.920/a90842/ch6.htm#1006369

您 运行 进入第二段讨论的问题 - 不要在语句终止符后添加注释。

这似乎是 SQL 开发人员 bug/feature。


desc[ribe] 是 SQL*Plus 语句之一,受 SQL 工作表支持。

https://docs.oracle.com/cd/E11882_01/doc.112/e12152/intro.htm#RPTUG10710


在SQL Developer中我们可以注意到一些在SQL*Plus中不存在的有趣现象:
1. 当给定多个标记时,除了最后一个标记外,所有标记都将被忽略。

desc some gibberish - yada yada yada t3

Name Null Type       
---- ---- ---------- 
C3        NUMBER(38) 

2。 -- 未被视为行注释的符号,而是对象名称。

desc --

ERROR:                          
------------------------------- 
ERROR: object -- does not exist 

3。 单个分号将被忽略,不会被视为语句终止符。

desc ; ; ; ; ; ; t1;

Name Null Type       
---- ---- ---------- 
C1        NUMBER(38) 

因此,当给出命令时 -

DESC Students; -- Some comment

只有最后一个标记 'comment' 正在处理并产生错误,因为没有对象 'comment'。