【问题标题】:Creating multiple tables with identical columns in Oracle在Oracle中创建具有相同列的多个表
【发布时间】:2020-03-27 11:38:15
【问题描述】:

我是 PL/SQL 的新手。是否可以在while(或for)循环内创建给定数量的具有相同列但特定表名的表,在字符串连接的帮助下设置各个表名,例如No_1、No_2 等?

我的尝试:

DECLARE
  my_num  integer := 1;
  conc char(1);
BEGIN
  WHILE my_num <= 5 LOOP
    select to_char(my_num) into conc from dual;

    Create table No_||conc (dists float);
    my_num :=my_num+1;
  END LOOP;
END;

它不起作用。如果有人能为我解释清楚,我将不胜感激。

【问题讨论】:

    标签: sql oracle plsql dynamic-sql


    【解决方案1】:

    您需要一个execute immediate 语句才能在 PL/SQL 块中运行 DDL,如下所示:

    DECLARE
      my_num  integer := 1;
      conc char(1);
    BEGIN
      WHILE my_num <= 5 LOOP
    
        execute immediate 'create table No_' || my_num || ' (dists float)';
    
        my_num :=my_num+1;
      END LOOP;
    END;
    

    但是,我想指出,Oracle 不鼓励使用integerfloat(支持number),而支持char 支持varchar2。而且我认为您的代码更常见的是这样编写的:

    BEGIN
      FOR my_num in 1..5 LOOP
        execute immediate 'create table No_' || my_num || ' (dists number)';
      END LOOP;
    END;
    

    【讨论】:

    • 感谢您的澄清!祝你有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多