2

テーブルの名前を変更するスクリプトを作成する任務を負っています。これはすべて簡単に聞こえますが、覚えておくべきことが他にもいくつかあります。名前の変更が必要な他のすべてのテーブルを含むテーブルがあります。Table の行に沿ったものは 3 つの列で構成され、最初の列は unpartitionednm、2 番目は originalnm、3 番目は partitionedtablenm です。select ステートメントを使用して 2 つのテーブルを選択し、それらのテーブルを使用して名前を変更するように言われました。これは私がこれまでに持っているものです:

declare
begin
  execute immediate 'select unpartitiontablenm "table1", originaltablenm "table2"
                     from tabletransformation                     
                     alter table table1
                     rename to table2';
end;

今、私は彼にこれを行うための別の方法を送信しようとしました。たとえば、名前変更パラメーターと、名前を変更したい 2 つのテーブルのうち、名前を変更したくないすべてのテーブルを受け入れる単純なスクリプトです。なぜこの方法が良いのか理解できないかもしれませんが、まあ、給料が必要なときに何ができるでしょうか。とにかく、彼が私に何をしたいのか、そして私がそれからどれだけ離れているのかを正確に理解する助けが必要です. 前もって感謝します。

上記のコードが間違っていることは理解していますが、彼が私にどのように説明したかをよりよく理解できるかもしれません.

4

1 に答える 1

3

あなたは次のようなものが欲しいようです

DECLARE
  l_sql_stmt VARCHAR2(4000);
BEGIN
  FOR i IN (SELECT unpartitiontablenm, originaltablenm 
              FROM tableTransformation)
  LOOP
    l_sql_stmt := 'ALTER TABLE ' || i.unpartitiontablenm|| 
                  ' RENAME TO ' || i.originaltablenm ;
    EXECUTE IMMEDIATE l_sql_stmt;
  END LOOP;
END;
于 2013-02-22T16:29:46.277 に答える