ORA-00913 值过多
Posted
技术标签:
【中文标题】ORA-00913 值过多【英文标题】:ORA-00913 too many values 【发布时间】:2017-09-28 14:43:47 【问题描述】:我有这个问题
INSERT INTO hist_museum (SELECT * from of_owner.museum al
JOIN (SELECT vd.city_data_id
FROM of_owner.city_data vd
WHERE gps_full_date < add_months(SYSDATE,-12)) vd
ON al.city_data_id = VD.city_data_id);
和表 hist_museum 和博物馆是完全相同的,但即使我得到了这个错误:
Error(10,19): PL/SQL: ORA-00913: demasiados valores
【问题讨论】:
您可能打算使用al.*
,但您应该在select
和insert
中都包含列列表。
@GordonLinoff,请转换为答案
【参考方案1】:
执行insert
时的最佳做法是明确列出列:
INSERT INTO hist_museum(col1, col2, . . . )
SELECT col1, col2, . . .
FROM of_owner.museum al JOIN
of_owner.city_data vd
ON al.city_data_id = VD.city_data_id
WHERE gps_full_date < add_months(SYSDATE, -12);
当然,SELECT
中的列,应该用表名来限定。
另外,子查询是不必要的。没有理由只为归档数据编写子查询。
【讨论】:
【参考方案2】:使用“select * from al JOIN ...”,您可以从 al 和您加入的子请求 vd 中获取所有值。你想要的是
INSERT INTO hist_museum (SELECT al.* from of_owner.museum al
JOIN (SELECT vd.city_data_id
FROM of_owner.city_data vd
WHERE gps_full_date < add_months(SYSDATE,-12)) vd
ON al.city_data_id = VD.city_data_id);
【讨论】:
以上是关于ORA-00913 值过多的主要内容,如果未能解决你的问题,请参考以下文章