2016-11-09 74 views
2

我已經創造了一些非常基本的SQL腳本的命令:的Oracle SQL Developer把我的意見爲

/* 
    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

如果我」我會得到同樣的錯誤WORLD「對象」...

我改變了整個腳本,以避免單行註釋,結果是一樣的。

我可以再次避免在這個例子中,但我真的想了解是什麼導致了這個奇怪的問題......


另一件事,這可能有助於解決這個問題,是另一種奇怪的錯誤我都在相同的腳本,在評論之上幾行。在這條線: ALTER TABLE Students MODIFY Address VARCHAR2(15);

SQL開發人員顯示我的最後兩個字符下稱Syntax error. Partially recognized rules (Railroad diagrams): ...

如果我要跑的聲明,它會工作得很好錯誤(右括號和分號)..

+0

使用'--'。兩個連字符應始終在SQL代碼中工作(這是註釋的ANSI標準)。 –

+2

我想這是因爲'DESC'不是一個真正的SQL語句。它最終甚至不需要';'。 'desc學生; - bla'導致SQL \ * Plus中的「無效標識符」。 SQL Developer試圖模仿我猜測的SQL \ * Plus行爲。所以你唯一的選擇是在你使用'DESC'的行中不要使用'--'註釋。' –

+0

@a_horse_with_no_name - 實際上這不是因爲'DESC'是一個SQL \ * Plus命令(與SQL或PL相對)。相反,無論聲明是什麼類型,註釋都不能在聲明終結符之後出現。 – mathguy

回答

4

這看起來像一個SQL Developer的bug /功能。


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 

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 

只有最後一個令牌「評論」被處理,併產生一個錯誤,因爲沒有對象「註釋」 。

+0

我在4.2中看不到這種行爲;哪個版本你看到它,出於興趣? –

+1

@AlexPoole,4.1.3.20 –