2012-10-19 3 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 다음 to_date() 호출이 그렇게 거기에 갈 수 없기 때문에

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

이 유효하지 않습니다.

당신은 아마 같은 뭔가를 찾고있다 :

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

RokUrodenzia 숫자 (4) 열이 아닌 날짜 열임을 주어진. RokUrodenzia가 DATE (내가 말했듯이)가 아니고 MONTHS_BETWEEN이 (가) 아마도 날짜를 예상하기 때문에 MONTHS_BETWEEN() 호출을 얻으려면 아직 작업을해야 할 수도 있습니다. 문제를 해결하는 방법을 조사해야합니다. 합법적으로 TO_DATE()를 사용할 수 있습니다.

+0

그것은 작동하지 않지만 날짜 열에 대해 RokUrodzenia를 변경할 때 그 값은 1980 년 형식으로 값을 삽입 할 수 없다고합니다. 저는 SQL에서 새롭게 1 주일 전 연구를 시작했으며 실제로 도움이 필요합니다 – user1760325

+0

RokUrodzenia는 출생의 경우, 그래서 당신은 학생 이름과 나이를 선택하려고합니까? 그렇다면 Oracle DATE의 YYYY-mm-dd 부분을 DATE 열에 삽입하지 마십시오. 그런 다음 MONTHS_BETWEEN을 쉽게 할 수 있습니다. 출생 연도 만 원하는 경우 MONTHS_BETWEEN없이 최선을 다하고 SYSDATE의 연도 부분을 숫자로 변환하면됩니다. 필자는 Oracle을 기본 DBMS로 사용하지 않으며 날짜/시간 처리는 항상 모든 SQL DBMS에서 가장 편심스러운 부분입니다. 아마도 응답의 일부로 TO_NUMBER()를 사용할 수 있습니다. TO_NOMBER (TO_CHAR (SYSDATE, 'YYYY'))'?와 같이 TO_CHAR()이 필요할 수도 있습니다. –

관련 문제