Oracle ORA-02287:此处不允许使用序列号
我试图从两个表中选择值,并将它们插入一个表中,然后计算每年的总就业人数。我一直收到一个错误,说这里不允许序列Oracle ORA-02287:此处不允许使用序列号,oracle,Oracle,我试图从两个表中选择值,并将它们插入一个表中,然后计算每年的总就业人数。我一直收到一个错误,说这里不允许序列 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
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);
你可以找到原因 以下是无法使用序列的情况: 对于SELECT语句: 在WHERE子句中 在GROUPBY或ORDERBY子句中 分句 与并集、交集或负数一起 在子查询中
此查询引发异常:
SELECT cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement
group by year;
这是因为不能在带有GROUPBY子句的查询中选择序列值
此外,GROUPBY子句必须包含select子句中的所有非聚合表达式,而您的select子句中没有。我猜那一年是EXTRACTYEAR 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)
);
像这样做
你可以使用这样的顺序,对于分组,我建议你遵循@Tony的另一个答案
插入到placement_cal中
cal_id.nextval,从开始日期算起的年份,countplacement_id
从安置
逐年分组
INSERT INTO placement_cal (
cal_id.nextval , EXTRACT(YEAR FROM start_date) , count(placement_id)
FROM placement_two
group by year);
奇怪的是,我没有看到一个真正的解决方案。使用CTE是一种变通方法。像这样的方法应该会奏效:
INSERT INTO placement_cal (
WITH tempPlacement AS (
SELECT EXTRACT(YEAR FROM start_date) year, count(placement_id) cnt
FROM placement
group by EXTRACT(YEAR FROM start_date)
) SELECT cal_id.nextval, year, cnt FROM tempPlacement
);
不相关,但是:select周围的括号对于insert完全没有用处。。。选择语句。甚至语法也是无效的。在子查询点中需要注意的一点是:我还遇到了ORA-02287使用定义为表函数的带有关系的子查询。这会产生错误:select*from tablesys.ku$\u objnumset1,2 t其中3不在select列中\u值from t,而此查询修复了该错误:将t作为select*from tablesys.ku$\u objnumset1,2 t select*from t其中3不在select列中\u值from t。有趣的是,并没有出现任何明显的序列,可能是表函数的某些内部。