1

我正在创建一个创建 TABLE 的脚本,但我必须执行的最后一个命令有问题:

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')
4

2 回答 2

0

从错误消息来看,它似乎缺少;.

于 2012-10-19T20:54:26.290 回答
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是一个 NUMBER(4) 列而不是 DATE 列。您可能仍需要做一些工作才能使 MONTHS_BETWEEN() 调用正常工作,因为 RokUrodenzia 不是 DATE(正如我所说)并且 MONTHS_BETWEEN 可能需要一个日期。您必须研究如何解决该问题;你可以在那里合法地使用 TO_DATE() 。

于 2012-10-19T20:55:55.323 回答