Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在循环中创建Oracle表_Oracle_Loops_Plsql - Fatal编程技术网

在循环中创建Oracle表

在循环中创建Oracle表,oracle,loops,plsql,Oracle,Loops,Plsql,我试图创建一条PL/SQL语句,它允许我在每次连续的日期时间迭代之后获得多个表输出,并使用该日期时间迭代的年份重命名每个表。下面的示例显示了所需的结果。谢谢 Create table MY_TIME_XX AS ( Select X.* FROM Metadata X ) Where X.Datetime between '01/01/2014' and '12/31/2014' 因此,最终我的模式将 我的时间 我的时间15 我的时间16 诸如此类的工作

我试图创建一条PL/SQL语句,它允许我在每次连续的日期时间迭代之后获得多个表输出,并使用该日期时间迭代的年份重命名每个表。下面的示例显示了所需的结果。谢谢

  Create table MY_TIME_XX AS 
   ( Select 
    X.* 
    FROM Metadata X )
    Where X.Datetime between '01/01/2014' and '12/31/2014'
因此,最终我的模式将

我的时间 我的时间15 我的时间16
诸如此类的工作需要动态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;  

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

为什么要这样做?最有可能的是,它没有任何意义。Select*FROM Metadata X不仅仅是我展示的五年跨度,它也相当大。我的临时文件保存不好,因此我想为每年创建一个able,然后将其放入一个分区单表中。在日期比较中不要使用字符串文字使用日期文字或to_date函数:例如,使用to_date'01/01/2014',“mm/dd/yyyy”或日期“2014-1-1”而不是“01/01/2014”为什么不创建分区表作为开始。你仍然可以一次插入一年的数据,而不是一次插入所有的数据。不明白这样做的逻辑。但这并不难做到。看一看。只需将CREATETABLE语句构建为字符串,然后使用execute immediate将其触发。