在循环中创建Oracle表

时间:2016-10-27 17:35:49

标签: oracle loops plsql

我正在尝试创建1个PL / SQL语句,这个语句允许我在每个连续的日期时间迭代后获得多个表输出,并使用该日期时间迭代的年份重命名每个表。以下示例具有期望的结果。感谢

  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
  4. 等...

1 个答案:

答案 0 :(得分:5)

这样的工作需要动态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;  

注意使用双引号来转义字符串中的文字。