2017-07-05 10 views
-1
create or replace procedure sp_test as 
begin 
CREATE TABLE T AS SELECT col1,col2 FROM t1; 
FOR N IN (SELECT * FROM T) LOOP 
    UPDATE t1 SET t1.col1='value' where col2='value2'; 
END LOOP; 
drop table T; 
end; 
/

t1表からt表にデータを選択して変更を適用し、それらの変更をt1表にマージする必要があります元のテーブル)を削除します。oracleのplsqlプロシージャ中に表を作成して選択できません

私はこのエラーを取得メートル:PLS-00103

+1

[Global Temporary Table](https://oracle-base.com/articles/misc/temporary-テーブル)を見てみたいです –

+2

DDLを直接使用することはできませんPL/SQLは 'EXECUTE IMMEDIATE 'を使用してテーブルを作成します。SELECT col1、col2 FROM t1'' –

+0

また、ちょうどそれを指摘するために、単一引用符の' value 'と' value2 'は単なるテストですあなたが実際にやろうとしているものの例であり、 'T'テーブルの各' N 'から取った実際の値に置き換えます。 –

答えて

0


あなたが任意のPL/SQLブロック内の任意のDDLのための即時実行を使用する必要があります。以下のコードを試してみてください。アップデートのための カーソル:あなたの貢献のための

create or replace procedure sp_test 
is 
begin 
Execute Immediate 'CREATE TABLE T AS SELECT col1,col2 FROM t1'; 

FOR N IN (SELECT * FROM T) LOOP 
    Execute immediate 'UPDATE t1 SET t1.col1=''value'' where col2=''value2'''; 
END LOOP; 
execute immediate 'drop table T'; 
end; 
/
0

おかげで誰もが、私は働く何かを試してみました。 助けてくれてありがとう

関連する問題