0

ピボットを解除した後にデータを挿入したいと思います。ステートメントはマージ ステートメントである必要があります。しかし、ora-30926 エラーが発生し、解決方法がわかりません。

ここにデータテーブル:

------------------------------------------------------------------------------------
|Employee_id | work_experience_1 | work_experience_2 | work_experience_3 | language |
-------------------------------------------------------------------------------------
| 123        |  C&S              |   Deloitte        |         TCS       |     FI   |
| 211        |   E&Y             |   Microsoft       |                   |     FI   |
| 213        |   C&S             |                   |                   |     FI   |
-------------------------------------------------------------------------------------

そのため、まずデータを入力する前に、データのピボットを解除する必要があります。

---------------------------------- 
|Employee_id | work_experience   |
----------------------------------
| 123        |   C&S             |
| 123        |   Deloitte        |
| 123        |     TCS           |
| 211        |   E&Y             |
| 211        |   Microsoft       |
| 213        |   C&S             |
----------------------------------

これが私がやったことです。挿入部分は正常に機能しますが、更新部分は失敗します。

MERGE INTO arc_hrcs.user_multi_work_exp work_exp
USING (SELECT user_id, work_experience_lang, work_exp_fi FROM
         (SELECT ext.user_id, tmp_work.employee_id, tmp_work.work_experience_1, tmp_work.work_experience_2, tmp_work.work_experience_3, tmp_work.work_experience_4, tmp_work.work_experience_5, tmp_work.work_experience_6, tmp_work.work_experience_7, tmp_work.work_experience_8, tmp_work.work_experience_9, tmp_work.work_experience_10, tmp_work.work_experience_lang FROM arc_hrcs.hr_extension_data ext
            JOIN aa_work_exp_tmp tmp_work ON tmp_work.employee_id = ext.employee_id) 
            UNPIVOT (work_exp_fi FOR work_code IN (work_experience_1 AS 'a', work_experience_2 AS 'b', work_experience_3 AS 'c', work_experience_4 AS 'd',  work_experience_5 AS 'e', work_experience_6 AS 'f', work_experience_7 AS 'g', work_experience_8 AS 'h', work_experience_9 AS 'i', work_experience_10 AS 'j'))) r
ON (work_exp.user_id = r.user_id AND r.work_experience_lang LIKE '%FI%' )
WHEN NOT MATCHED THEN
     INSERT (work_exp.user_id, work_exp.work_experience_fi)
     VALUES (r.user_id, r.work_exp_fi)
WHEN MATCHED THEN
     UPDATE SET work_exp.work_experience_fi = r.work_exp_fi

機能させるにはどうすればよいですか?事前に乾杯とthx :-)

4

2 に答える 2

0

Essentially, the query in the USING cause is a multiple-row subquery, when it needs to be a single-row subquery. I would try running the subquery in isolation and attempt to fix the logic of the WHERE cause so that you bring back a unique row.

http://blog.mclaughlinsoftware.com/2010/03/05/stable-set-of-rows/

于 2012-10-29T17:36:43.823 に答える
0

承知しましたが、MERGE ステートメントには、ON 句とターゲット テーブルで指定された UNIQUE または PRIMARY KEY 列が必要です。データ サンプルを見ると、ソース テーブルでそれ (データ) が欠落している可能性があります。

于 2012-08-13T14:22:02.753 に答える