Oracle SQL Developer将我的注释视为命令
我创建了一些非常基本的SQL脚本:Oracle SQL Developer将我的注释视为命令,sql,oracle,oracle-sqldeveloper,sqlplus,Sql,Oracle,Oracle Sqldeveloper,Sqlplus,我创建了一些非常基本的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 VAR
/*
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
在脚本输出的末尾
我收到以下错误消息:
错误:对象注释不存在
如果我将注释更改为helloworld
,我将得到与World
“object”相同的错误
我改变了整个脚本以避免单行注释,结果是一样的
在这个例子中,我可以再次避免它,但我真的想了解是什么导致了这个奇怪的问题
另一件可能有助于解决这个问题的事情是,我在同一个脚本中遇到了另一个奇怪的错误,注释上方几行。在这方面:
ALTER TABLE学生修改地址VARCHAR2(15)代码>
SQLDeveloper在最后两个字符(右括号和分号)下显示了一个错误,表示语法错误。部分识别的规则(铁路图):…
如果我运行该语句,它将正常工作…--
和\***\
和REM
在SQL*Plus脚本中都是可以的,但有一些限制
您遇到了第二段中讨论的问题-不要在语句终止符后添加注释。这似乎是SQL开发人员的错误/功能
desc[ribe]是SQL工作表支持的SQL*Plus语句之一
在SQL Developer中,我们可以注意到一些SQL*Plus中不存在的有趣现象:
1.
当给定多个令牌时,将忽略除最后一个令牌之外的所有令牌
desc some gibberish - yada yada yada t3
二,<代码>--
不是作为行注释的符号,而是作为对象名
desc --
三,。 将忽略单个分号,而不是将其视为语句终止符
desc ; ; ; ; ; ; t1;
因此,当发出命令时—
DESC Students; -- Some comment
只处理最后一个标记“comment”,并产生错误,因为没有对象“comment”。使用
--
。两个连字符应该总是在SQL代码中工作(这是ANSI注释标准)。我想这是因为DESC
不是真正的SQL语句。它甚至不需要代码>在末尾<代码>描述学生;——bla将导致SQL*Plus中的“无效标识符”。SQL开发者试图模仿我猜的SQL*Plus行为。因此,您唯一的选择是不要在使用DESC
@a_horse\u的行中使用--
注释,因为DESC
是一个SQL*Plus命令(与SQL或PL相反);相反,无论语句终止符是哪种类型的语句,注释都不能出现在语句终止符之后。@mathguy-这在SQL*Plus中是正确的,但在SQL Developer中是不正确的,它允许在终止符之后添加注释(至少在4.2中是这样)。但是OP的例子得到了相同的响应,有分号和没有分号(“用法:descripe[schema.]object[@db_link]”,而不是OP显示的错误-我猜是较早的版本?),而在SQL*Plus中,它得到的是没有分号和SP2-0565的响应。模仿并不完美*8-@AlexPoole-对于直接从SQLDeveloper运行的脚本,或者对于从文件运行的脚本,也是这样吗?我假设对于从文件运行的脚本,SQL开发人员只调用SQL*Plus(但我没有动机测试…{:-)我在4.2中没有看到这种行为;出于兴趣,您在哪个版本中看到它?@AlexPoole,4.1.3.20
desc ; ; ; ; ; ; t1;
Name Null Type
---- ---- ----------
C1 NUMBER(38)
DESC Students; -- Some comment