sql >> データベース >  >> RDS >> Oracle

Oracle PL / SQLを使用して、特定のOracleソース表から10個の同様の表を作成する方法

    dynamic SQLが必要です そのため、Oracleではexecute immediateを使用できます そうするために。

    declare
      type array_t is table of varchar2(10);
      array array_t := array_t();
      lo_stmt varchar2(2000);
    begin
      select distinct kind
        bulk collect into array
        from all_data;
      
      for i in 1..array.count loop
        --dbms_output.put_line(array(i));
        lo_stmt :=
        'create table '||array(i)||'_data '||
        'as '||
        'select kind,time_period,amount '||
        '  from all_data '||
        ' where kind = '''||array(i)||'''';
        --dbms_output.put_line(lo_stmt);
        execute immediate lo_stmt;
      end loop;
    end;
    /
    

    デモはこちら でご覧いただけます。

    または1つのステートメントで

    declare
      type array_t is table of varchar2(4000);
      array array_t := array_t();
      lo_stmt varchar2(2000);
    begin
      select distinct 'create table '||kind||'_data '||
        'as '||
        'select kind,time_period,amount '||
        'from all_data '||
        'where kind = '''||kind||''''
        bulk collect into array
        from all_data;
      
      for i in 1..array.count loop
        --dbms_output.put_line(array(i));
        execute immediate array(i);
      end loop;
    end;
    /
    

    こちら でも機能します



    1. PostgreSQLのカスタムトリガーベースのアップグレード

    2. Oracleの権限を取り消す

    3. Ajax呼び出しが機能していません-ajaxphpおよびmysqlJSONを介してjstreeにデータを入力しようとしています

    4. phpシングルトンデータベース接続、このコードは悪い習慣ですか?