2017-09-28 1 views
0

私はこのクエリを持ってORA-00913値が多すぎ

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 
+2

あなたは 'al。*'を意図しているかもしれませんが、 'select'と' insert'の両方に列のリストを含めるべきです。 –

+0

@GordonLinoff、答えに変換してください –

答えて

2

選択」で* Al JOIN ...から "あなたはalとあなたの参加したサブリクエストvdのすべての値を取得します。 insert列を明示的にリストすることですやったときに何が欲しいのベストプラクティス

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

です:

もちろん
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の列は、テーブル名で修飾する必要があります。

さらに、サブクエリは不要です。ファイラーデータだけにサブクエリを書き込む理由はありません。

関連する問題