arg*_*nza 4 sql oracle sqlplus oracle-sqldeveloper
我已经创建了一些非常基本的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
Run Code Online (Sandbox Code Playgroud)
在Script Output我收到此错误消息的最后:
ERROR: object COMMENT does not exist
如果我将注释更改Hello World为WORLD" 我将为"对象" 获得相同的错误...
我更改了整个脚本以避免单行注释,结果是一样的.
在这个例子中我可以再次避免它,但我真的想了解是什么导致了这个奇怪的问题......
可能有助于解决问题的另一件事是我在同一个脚本中出现的另一个奇怪的错误,在评论上方几行.在这一行:
ALTER TABLE Students MODIFY Address VARCHAR2(15);
SQL Developer在最后两个字符(右括号和分号)下显示错误 Syntax error. Partially recognized rules (Railroad diagrams): ...
如果我将运行该声明它将工作得很好......
这似乎是一个SQL Developer错误/功能.
desc [ribe]是SQL Worksheet支持的SQL*Plus语句之一.
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
Run Code Online (Sandbox Code Playgroud)
Name Null Type
---- ---- ----------
C3 NUMBER(38)
Run Code Online (Sandbox Code Playgroud)
2. --不被视为行注释的符号,而是作为对象名称.
desc --
Run Code Online (Sandbox Code Playgroud)
ERROR:
-------------------------------
ERROR: object -- does not exist
Run Code Online (Sandbox Code Playgroud)
3.单个分号被忽略,不被视为语句终止符.
desc ; ; ; ; ; ; t1;
Run Code Online (Sandbox Code Playgroud)
Name Null Type
---- ---- ----------
C1 NUMBER(38)
Run Code Online (Sandbox Code Playgroud)
因此,当给出命令时 -
DESC Students; -- Some comment
Run Code Online (Sandbox Code Playgroud)
由于没有对象'comment',因此只处理最后一个令牌'comment'并产生错误.