0

ループが実行されるたびに、テーブルに列を追加したいと考えています。ループ内の反復ごとに異なる名前を取る一時変数を作成しました。今、テーブルに同じ名前の列を追加したいと考えています。私はこのようなことを試しました.コードの一部はoracle sql developerに示されています:

DECLARE V_COUNT VARCHAR (10) := ZIP_COD
BEGIN
ALTER TABLE ABCD 
ADD V_COUNT varchar(10);

update ABCD b
set b.V_COUNT = (select d.ZIP_cod
from ORA_DMSTORE d
where b.id_dmstore = d.id_dmstore);
END;

これは、「通常は PL/SQL コンパイル エラー」というエラーを示しています。私はそれを取り除く方法がわかりません。助けてください

4

1 に答える 1

1

ALTER TABLE ..まず、 PL/SQL ではできません。 dbms_sqlorを使用する必要がありexecute immediateます。

nまた、列名を数字で始めることはできないため、私の例では何らかの接頭辞が必要です。

したがって、考えられる解決策の1つは次のとおりです。

DECLARE 
 V_COUNT VARCHAR (10) := ZIP_COD;
BEGIN
 EXECUTE IMMEDIATE 'ALTER TABLE ABCD ADD (n'||V_COUNT||' varchar(10))';

 EXECUTE IMMEDIATE '
 update ABCD b 
   set b.n'||V_COUNT||' = (select d.ZIP_cod
                             from ORA_DMSTORE d
                            where b.id_dmstore = d.id_dmstore)
 ';
END;
/
于 2012-08-25T12:32:02.643 に答える