0

このコードを実行しようとしています

declare 
temp_atr_val varchar2(400);
temp_val varchar2 (400);
temp_sum_percent decimal (10,3);
temp_variable number (10,3);
column_count number ; 
val_count number;
sales_store number;
begin    
select count(distinct ATTRIBUTE_INPUT) into column_count from look_up_table;
for ind in 1..column_count loop

    /* putting current value of attribute from look_up_table in temp variable*/
    select ATTRIBUTE_INPUT into temp_atr_val from (
        select ATTRIBUTE_INPUT, rownum rwn
        from 
        (
           select distinct ATTRIBUTE_INPUT
           from look_up_table
        )
    ) where rwn = ind;

    select count( value_for_atr ) into val_count from look_up_table;

    for ind in 1..val_count loop

   /* putting current value_for_atr for corresponding attribute from look_up_table in temp variable*/
        select value_for_atr into temp_val from 
         (
          select value_for_atr, rownum rwn
          from look_up_table
         ) where rwn = ind;

       SELECT SUM(CASE WHEN temp_atr_val = temp_val THEN net_sales_home ELSE 0 END) into temp_variable
       FROM schemafinal;

 /*temp_variable := temp_variable/sales_store;*/


 EXECUTE IMMEDIATE 'ALTER TABLE SAR ADD (percent_'||temp_val||' number)';
 EXECUTE IMMEDIATE ' update SAR b 
 set b.percent_'||temp_atr_val||'_'||temp_val||' = 105 ';


END LOOP;
END LOOP;   
END;

しかし、コードが2つのエラーのいずれかを表示するたびに: ORA-01430: 追加されている列がテーブルに既に存在します

  1. 00000 - 「右括弧がありません」

そして、SAR テーブルを確認すると、新しい列が 5 つしか作成されていません。なぜこれが起こっているのかわかりません。ほとんどすべてを試しました。

4

1 に答える 1

0

データ構造を知らずにクエリを分析することは困難です。

しかし、temp_val を見つけるために、2 番目のループ選択クエリで追加の ATTRIBUTE_INPUT 条件が必要であると想定しています。それ以外の場合、ATTRIBUTE_INPUT temp_val ごとに同じ結果が返されます。

つまり、最初のループの 2 回目の反復では、temp_val は最初の反復と同じ古い値になります。そのため、Alter table Add クエリはエラーをスローします。

そのため、ATTRIBUTE_INPUT 条件を追加してみてください

   /* putting current value_for_atr for corresponding attribute from look_up_table in temp variable*/
        select value_for_atr into temp_val from 
         (
          select value_for_atr, rownum rwn
          from look_up_table
          where ATTRIBUTE_INPUT = temp_atr_val
         ) where rwn = ind;
于 2012-08-29T18:27:13.533 に答える