2015-12-31 13 views
6

Próbuję wybrać wartości z dwóch tabel i wstawić je do jednej tabeli i obliczyć liczbę miejsc docelowych ogółem rocznie. Wciąż otrzymuję błąd mówiąc sekwencja niedozwolone tutajORA-02287: numer kolejny jest niedozwolony

DROP table placement_cal CASCADE CONSTRAINTS; 

CREATE TABLE placement_cal(
    cal_id INTEGER NOT NULL, 
    year INTEGER, 
    no_of_placements INTEGER, 
    CONSTRAINT pk_cal_dim PRIMARY KEY (cal_id) 
); 


INSERT INTO placement_cal (
SELECT cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id) 
FROM placement 
group by year); 

INSERT INTO placement_cal (
SELECT cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id) 
FROM placement_two 
group by year); 
+1

niezwiązane, ale: nawiasy wokół select są całkowicie bezużyteczne dla 'wkładką ... wybierz .. . oświadczenie. –

Odpowiedz

7

Można uzyskać przyczynę w FAQ

są następujące przypadki, w których nie można użyć sekwencji:

Dla SELECT:

  • w klauzuli WHERE
  • W GROUP BY lub ORDER BY
  • W odrębnej klauzuli
  • Wraz z unii lub INTERSECT lub minus
  • w pod-zapytania
6

To zapytanie podnosi wyjątek:

SELECT cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id) 
FROM placement 
group by year; 

Jest tak, ponieważ nie można wybrać wartości sekwencji w zapytaniu z klauzulą ​​group by.

Również klauzula musi zawierać wszystkie wyrażenia nieagregatowe z klauzuli select, której nie robi. Zgaduję, że year jest aliasem dla EXTRACT(YEAR FROM start_date), w tym przypadku jest to zapytanie musisz:

INSERT INTO placement_cal 
SELECT cal_id.nextval, year, cnt FROM 
(SELECT EXTRACT(YEAR FROM start_date) year, count(placement_id) cnt 
    FROM placement 
    group by EXTRACT(YEAR FROM start_date) 
); 
Powiązane problemy