【问题标题】:Create multiple tables with array variable使用数组变量创建多个表
【发布时间】:2014-02-04 11:00:38
【问题描述】:

这就是问题所在。

我从一个表中读取年份数字并将它们插入另一个表中(现在是静态的,但在最后的临时表中)

然后我查看这些数字并用它们创建表格。

BEGIN 
 INSERT INTO temp_year
  ( year_column )
  ( 
    select extract(year from datum) from datetest
  ); 

FOR counter_id IN ( SELECT * FROM temp_year )
LOOP  
      EXECUTE IMMEDIATE 'Create table YEAR_' || counter_id || ' (year int, name char(50))'        
END LOOP; 
END; 
/

Temp_year 有一列 year_column (int) (填充如 2012 年) datatest 有一个日期列,其值类似于 10.02.2012

结果应该是一个名为 YEAR_2012 的表,其中列 year int 和名称 char(50)

但是这不起作用。即使 temp_year 表中有年份,我也会在执行立即部分退出。

有什么想法吗??

提前致谢。

流浪汉

【问题讨论】:

    标签: sql arrays oracle loops create-table


    【解决方案1】:

    试试这个:

    EXECUTE IMMEDIATE 'Create table YEAR_' || counter_id.year_column || ' (year integer, name varchar2(50))';
    

    (不要错过最后的分号)

    【讨论】:

    • 我得到:调用中参数的数量或类型 ||是错误的(从德语翻译,所以它可能不是 100% 英文错误消息)Error report:`ORA-06550:第 10 行,第 29 列:``PLS-00306:Aufruf von 中的 Falsche Anzahl oder Typen von Argumenten '|| '` ` ORA-06550: 第 10 行,第 11 列:` PL/SQL: Statement ignored ` 06550. 00000 - “第 %s 行,第 %s 列:\n%s”` ` *原因:通常是 PL/SQL 编译错误。`
    • 对不起,我更新了。请注意,您可以通过ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN'; 将错误消息更改为英文
    • 感谢它现在正在工作。但是我得到了这个:错误报告:ORA-00955:名称已被现有对象使用 ORA-06512:在第 10 行 00955。00000 -“名称已被现有对象使用” *原因:为什么会这样?
    • 在使用临时表完成所有操作后,它工作得很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多