【问题标题】:ORA-00913 too many valuesORA-00913 值过多
【发布时间】: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.*,但您应该在selectinsert 中都包含列列表。
  • @GordonLinoff,请转换为答案

标签: sql oracle oracle12c


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多