2015-12-31 24 views
6

我試圖從兩個表中選擇值並將它們插入一個表中,並計算每年總計的展示位置數。我不斷收到一個錯誤說序列這裏不允許ORA-02287:此處不允許輸入序列號

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

無關,而是:各地選擇的括號裏的'插入完全無用的... ..選擇。聲明。 –

回答

7

你可以得到的原因在FAQ

以下的地方,你不能用一個序列的情況:

對於SELECT語句:

  • 在WHERE子句
  • 在GROUP BY或ORDER BY子句
  • 在DISTINCT子句
  • 隨着工會或相交或減號
  • 在一個子查詢
6

此查詢引發異常:

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

這是因爲您無法在具有group by子句的查詢中選擇序列值。

另外,group by子句必須包含select子句中的所有非聚合表達式,這是您不知道的。我猜測,year是別名EXTRACT(YEAR FROM start_date),在這種情況下,這是你需要查詢:

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) 
);