2016-10-27 6 views
3

私は1つのPL/SQL文を作成しようとしています。これにより、各datetimeの繰り返しの後に複数のテーブル出力を取得し、各datetimeの名前をそのdatetime繰り返しの年に変更できます。以下の例は望ましい結果を示します。おかげループ内にOracleテーブルを作成する

Create table MY_TIME_XX AS 
    (Select 
    X.* 
    FROM Metadata X) 
    Where X.Datetime between '01/01/2014' and '12/31/2014' 

だから最後に私のスキーマが

  1. MY_TIME_14
  2. MY_TIME_15
  3. MY_TIME_16

などを持っています....このような

+0

なぜあなたはそれをしたいですか?ほとんどの場合、それは意味をなさないでしょう。 –

+0

(Select * FROM Metadata X)は、私が5年間見せたものだけでなく、かなり大きいものです。私の一時ファイルはそれをうまく保持していませんので、毎年できるようにして、それをパーティションの単一テーブルに入れたいと思います。 – Tinkinc

+1

日付比較で文字列リテラルを使用しないでください。日付リテラルまたはto_date関数を使用してください。 ''01/01/2014''の代わりにto_date('01/01/2014 '、' mm/dd/yyyy ')'または 'date' 2014-1-1''を使用してください – Sentinel

答えて

4

ジョブが必要です動的SQL。 範囲の年数を知っているとすれば、このような何かがあなたのために必要です。

begin 
    for idx in 2014..2016 loop 
     execute immediate 
      'Create table MY_TIME_'|| idx ||' AS 
       Select X.* 
       FROM Metadata X 
       Where to_char(X.Datetime, ''yyyy'') = '''|| idx||''''; 
    end loop; 
end; 

文字列のエスケープリテラルには二重引用符を使用することに注意してください。

関連する問題