Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL Developer将我的注释视为命令_Sql_Oracle_Oracle Sqldeveloper_Sqlplus - Fatal编程技术网

Oracle SQL Developer将我的注释视为命令

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

我创建了一些非常基本的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
脚本输出的末尾
我收到以下错误消息:
错误:对象注释不存在

如果我将注释更改为
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