2017-03-06 11 views
-1

postgresクエリを作成して、beta_plan_idのクラスタIDを取得し、後でいくつかの操作を行う必要があります。下の表の1つのbeta_plan_idに対して、多数の商品IDがありますcluster_id。これはどのように扱われますか?postgresコードのforループで提案が必要

BETA_PLAN_ID MERCH_LEVEL1_ID BETA_PLAN_MERCH_LVL1_CLSTR_ID NO_OF_STORES 
1     1     12       5,6,7 
1     1     13       9,10 
1     1     14       2,3,4 
2     2     15       13,12 

SELECT BETA_PLAN_MERCH_LVL1_CLSTR_ID INTO i_clstr_id 
FROM beta_plan.BETA_PLAN_MERCH_LVL1_CLSTR 
WHERE BETA_PLAN_ID = in_beta_plan_id; 

問題はBETA_PLAN_MERCH_LVL1_CLSTR_IDは、シリアル型で一意(beta_plan_id、merch_id、CLUSTER_ID)コンボのために生成するので、多くの結果が返されるです。代わりに、最初のSELECT文の

SELECT BETA_PLAN_MERCH_LVL1_CLSTR_ID 
    INTO i_clstr_id 
    FROM beta_plan.BETA_PLAN_MERCH_LVL1_CLSTR 
    WHERE BETA_PLAN_ID = in_beta_plan_id; 

INSERT INTO beta_plan.BETA_PLAN_MERCH_LVL1_CLSTR 
    (
     BETA_PLAN_ID, 
     MERCH_LEVEL1_ID, 
     CLUSTER_ID, 
     CLUSTER_NAME, 
     NO_OF_STORES, 
     NO_OF_FOOTAGE_VARIATION, 
     CREATED_USER, 
     CREATED_TS 
    ) 
    SELECT 
     out_plan_id, 
     merch_lvl1_clstr.MERCH_LEVEL1_ID, 
     merch_lvl1_clstr.CLUSTER_ID, 
     merch_lvl1_clstr.CLUSTER_NAME, 
     merch_lvl1_clstr.NO_OF_STORES, 
     merch_lvl1_clstr.NO_OF_FOOTAGE_VARIATION 
     in_user_id, 
     now() 
    FROM beta_plan.BETA_PLAN_MERCH_LVL1_CLSTR merch_lvl1_clstr 
     INNER JOIN beta_plan.BETA_PLAN_MERCH_COPY_PLAN merch_copy 
     ON merch_copy.MERCH_ID = merch_lvl1_clstr.MERCH_LEVEL1_ID 
      AND merch_lvl1_clstr.BETA_PLAN_ID = in_beta_plan_id 
    RETURNING BETA_PLAN_MERCH_LVL1_CLSTR_ID INTO o_clstr_id; 

INSERT INTO beta_plan.BETA_PLAN_MERCH_LVL1_CLSTR_STR 
    (
     BETA_PLAN_MERCH_LVL1_CLSTR_ID, 
     STORE_ID, 
     CREATED_USER, 
     CREATED_TS   
    ) 
    SELECT 
     o_clstr_id, 
     STORE_ID,  
     in_user_id, 
     now() 
    FROM beta_plan.BETA_PLAN_MERCH_LVL1_CLSTR_STR 
    WHERE BETA_PLAN_MERCH_LVL1_CLSTR_ID = i_clstr_id; 
+0

与えられた 'BETA_PLAN_ID'に対して返される' BETA_PLAN_MERCH_LVL1_CLSTR_ID'はどれですか? –

+0

私は、cluster_idの12,13,14を持っているbeta_plan_id 1の行が必要です。これらのidと対応するstore_idをclstr_strテーブルに挿入する必要があります。基本的には、レコードを介してselect文ループが必要で、clstr_strテーブルに挿入する必要があります。最後に。 –

+0

データベースクライアント上のPostgreSQL関数またはプログラミングランムグァージュでは? –

答えて

0

、他の文を囲むFORループを使用します。

FOR i_clstr_id IN 
    SELECT BETA_PLAN_MERCH_LVL1_CLSTR_ID 
    FROM beta_plan.BETA_PLAN_MERCH_LVL1_CLSTR 
    WHERE BETA_PLAN_ID = in_beta_plan_id 
LOOP 
    /* your two INSERT statements come here */ 
END LOOP; 

の詳細については、the documentationを参照してください。

関連する問題