2012-10-19 73 views
1

我正在創建一個腳本來創建一個TABLE,並且我有最後一個命令我必須做的問題:SQL錯誤:ORA-00933:SQL命令未正確結束錯誤在行:3列:35

SELECT Studenci.Nazwisko, 
    Trunc(Months_Between(Sysdate,Studenci.RokUrodzenia)/12) Wiek FROM 
    Studenci.RokUrodzenia to_date('1980','YYYY') 

這是我的腳本;我究竟做錯了什麼?

CREATE TABLE Studenci(
     NrIndeksu NUMBER(3) PRIMARY KEY, 
     Nazwisko VARCHAR2(16), 
     RokUrodzenia NUMBER(4), 
     Kierunek VARCHAR2(12) 
    ); 

    CREATE TABLE Wykladowcy(
     IdWykladowcy NUMBER(4) PRIMARY KEY, 
     Nazwisko VARCHAR2(16), 
     Stopien VARCHAR2(6), 
     Stanowisko VARCHAR(8) 
    ); 

    CREATE TABLE Kursy(
     IdKursu NUMBER(1) PRIMARY KEY, 
     Nazwa VARCHAR2(18), 
     IdWykladowcy NUMBER(4) REFERENCES Wykladowcy 
    ); 

    CREATE TABLE Rejstracje(
     NrIndeksu NUMBER(3) REFERENCES Studenci , 
     IdKursu NUMBER(1) REFERENCES Kursy , 
     Data DATE 
    ); 


    CREATE UNIQUE INDEX Ind_Kursy_naz ON Kursy(Nazwa); 
    CREATE INDEX Ind_Studenci_naz ON Studenci(Nazwisko); 
    CREATE INDEX Ind_Wykladowcy_naz ON Wykladowcy(Nazwisko); 

    INSERT INTO Wykladowcy VALUES (1010,'Kowalski Jan', 'Dr', 'Adiunkt'); 
    INSERT INTO Wykladowcy VALUES (1011,'Jakubowski Emil','Dr hab','Docent'); 
    INSERT INTO Wykladowcy VALUES (1012,'Gazda Mirosław','Dr','Profesor'); 

    INSERT INTO Kursy VALUES (1,'Bazy danych',1010); 
    INSERT INTO Kursy VALUES (2,'Systemy operacyjne',1012); 
    INSERT INTO Kursy VALUES (3,'Multimedia',1011); 
    INSERT INTO Kursy VALUES (4,'Sieci komputerowe',null); 

    INSERT INTO Studenci VALUES (101,'Kuczyńska Ewa',1980,'Bazy danych'); 
    INSERT INTO Studenci VALUES (102,'Lubicz Robert',1985,'Multimedia'); 
    INSERT INTO Studenci VALUES (103,'Krajewski Bogdan',1988,'Bazy danych'); 
    INSERT INTO Studenci VALUES (104,'Lityńska Anna',1987,'Multimedia'); 
    INSERT INTO Studenci VALUES (105,'Marzec Marcin',1982,'Multimedia'); 
    INSERT INTO Studenci VALUES (106,'Cichaocki Rafał',1989,'Bazy danych'); 

    INSERT INTO Rejstracje VALUES (101,1,NULL); 
    INSERT INTO Rejstracje VALUES (102,3,NULL); 
    INSERT INTO Rejstracje VALUES (104,3,NULL); 
    INSERT INTO Rejstracje VALUES (106,1,NULL); 
    INSERT INTO Rejstracje VALUES (104,2,NULL); 
    INSERT INTO Rejstracje VALUES (101,4,NULL); 
    INSERT INTO Rejstracje VALUES (103,1,NULL); 
    INSERT INTO Rejstracje VALUES (103,1,NULL); 
    INSERT INTO Rejstracje VALUES (105,1,NULL); 


    UPDATE Rejstracje SET Rejstracje.IdKursu=Rejstracje.IdKursu*3 
    WHERE Rejstracje.NrIndeksu=105; 
    COMMIT UPDATE 

    INSERT INTO Rejstracje(Data) 
    VALUES (Sysdate); 

    SELECT *FROM Kursy 
    WHERE Kursy.IdWykladowcy IS NULL; 

    SELECT *FROM Rejstracje 
    WHERE Rejstracje.NrIndeksu=101; 

    SELECT Kursy.Nazwa 
    FROM Kursy 
    ORDER BY Nazwa ASC; 

    SELECT Studenci.Nazwisko, 
    Trunc(Months_Between(Sysdate,Studenci.RokUrodzenia)/12) Wiek 
    FROM Studenci.RokUrodzenia to_date('1980','YYYY') 

回答

0

從錯誤消息,它似乎是一個失蹤;

+0

它可能只是一個缺失的分號;解決這個問題只是解決最後一個問題的開始。 –

0

這個SQL:

SELECT Studenci.Nazwisko, 
     Trunc(Months_Between(Sysdate,Studenci.RokUrodzenia)/12) Wiek 
    FROM Studenci.RokUrodzenia to_date('1980','YYYY'); 

是無效的,因爲to_date()呼叫不能去那裏那樣。

您可能正在尋找類似:

SELECT Studenci.Nazwisko, 
     Trunc(Months_Between(Sysdate,Studenci.RokUrodzenia)/12) Wiek 
    FROM Studenci 
WHERE RokUrodzenia = 1980; 

因爲RokUrodenzia是一個數字(4)柱,而不是DATE列。您可能仍需要做一些工作才能使MONTHS_BETWEEN()調用生效,因爲RokUrodenzia不是DATE(正如我所說的),而MONTHS_BETWEEN可能預計會有日期。你必須研究如何解決這個問題。你可以合法地使用TO_DATE()。

+0

它不工作,但是當我改變RokUrodzenia爲DATE列,它說我不能插入價值格式1980年。我是新的SQL我開始研究它1周前,真的需要幫助 – user1760325

+0

是RokUrodzenia日期出生,所以你試圖選擇學生的姓名和年齡?如果是這樣,爲什麼不將Oracle DATE的YYYY-mm-dd部分插入到DATE列中。然後你可以輕鬆地做MONTHS_BETWEEN。如果您只想要出生年份,那麼您可以在沒有MONTHS_BETWEEN的情況下做到最好,並簡單地將SYSDATE的年份部分轉換爲數字。我不使用Oracle作爲主DBMS,日期/時間處理始終是每個SQL DBMS中最偏心的部分。您可以使用TO_NUMBER()作爲答案的一部分;你也可能需要TO_CHAR():'TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))'? –

相關問題