2016-12-16 12 views
-1

構文:PL SQL IDE:PL/SQL Developerの自動化は、カーソルまたはループを使用して動的SQLを使用してテーブルのプロシージャを作成します - PLSQL

を私は地域コードのシリーズを使用して、各地域の4つのテーブルを生成しようとしています。

私は、すべての領域が含まれたテーブルを生成し、このテーブルを切り捨てて置き換えるのが効率的かもしれないが、使用に必要な構造に基づいてこれには許可されていないことを理解します。

4つの領域を動的にテーブルのこのシリーズを生成するための最善の方法は何

SELECT DISTINCT REGION 
FROM REGION_TABLE 
; 

特定のテーブルから来ましたか?

私はカーソルとループを使用しようとしましたが、このカーソルを次のプロシージャに統合する方法がわかりません。

DECLARE 
CURSOR C_REGION IS 
     SELECT DISTINCT REGION FROM REGION_TABLE ; 
BEGIN 
    FOR L_IDX IN C_REGION 
    LOOP 
    DBMS_OUTPUT.PUTLINE(L_IDX.C_REGION); 
    END LOOP; 
END; 

上記カーソル値を使用して、どのように私は、where句

-- 4 REGIONS - NORTH SOUTH EAST WEST, 

CREATE OR REPLACE PROCEDURE SALES_ORDER_TBL_PROC 
      (
      REGION IN VARCHAR2 
      , RETURNCODE OUT NUMBER 
      , ERROR_MESSAGE OUT VARCHAR2 
     ) 
      IS 
    TABLE_NAME VARCHAR2(30); 
    SQL_STR VARCHAR2; 
    REGION_VAR VARCHAR;   
BEGIN 
    TABLE_NAME := 'SALES_COUNT_'||REGION_VAR; 
    SQL_STR := 'CREATE TABLE '||TABLE_NAME|| 
      ' AS 
       (
       SELECT 
         REGION 
          , COUNT(DISTINCT MEMBER_ID) AS NUM_MBR 
         FROM INCREMENTAL_SALES_TBL 
         WHERE 1=1 
          AND REGION = '||REGION_VAR|| 
          'GROUP BY REGION)' 
       ; 

EXECUTE IMMEDIATE SQL_STR ; 

     RETURNCODE := 0; 

EXCEPTION WHEN OTHERS THEN 

     RETURNCODE := SQLCODE; 

     ERROR_MESSAGE :='ERR:Creating/Altering table '||TABLE_NAME ||'-'||SQLERRM; 
END; 
/

BEGIN 
    SALES_ORDER_TBL_PROC; 
END; 
にパラメータSQL文の作成表の部分で使用されていないだけで、テーブル名にはなくて、これらの値を挿入する行くのです
+1

テーブルを作成することは、一度だけの仕事のようです。なぜそれのための手続きが必要ですか? – GurV

+0

これらはレポート表です。 - 会社の手続きでは、ただちに再建する必要があります。 – BGDev

+1

データを切り捨て、データを – GurV

答えて

1

DDLをforループに入れるのはどうですか?私は以下のコードをテストしていませんが、あなたの目標に向かう道にあなたを置いてください。

FOR rec IN (SELECT DISTINCT REGION FROM REGION_TABLE) LOOP 
    EXECUTE IMMEDIATE 
    'CREATE TABLE SALES_COUNT_' || UPPER(rec.region) || ' AS (
     SELECT REGION, 
       COUNT(DISTINCT MEMBER_ID) AS NUM_MBR 
     FROM INCREMENTAL_SALES_TBL 
     WHERE REGION = ''' || rec.region || ''' 
     GROUP BY REGION)'; 
END LOOP; 

私はそれがIMMEDIATE EXECUTEと連結になると制限が何であるかを覚えていないことができますが、それは、その後働いていない場合には、バインド変数とUSING句を使用することが可能です。

+0

このプロセスは非常にうまく動作し、いくつかのtweeksで実行されました。 – BGDev

+0

このプロセスはとてもうまく動作し、1つのtweekで実行されました。 1. where句はWHERE REGION = '' 'でなければなりません。 REC.REGION ||| '' 'ありがとうございました – BGDev

+0

@BGDevああ、ほとんど毎回私を迎えます。あなたはそれを整理してうれしい!それを指摘してくれてありがとう、私は答えでそれを修正します。 – tilper

関連する問題