在Oracle中创建具有相同列的多个表

问题描述 投票:0回答:1

我是PL / SQL的新手。是否有可能在一阵(或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个回答
0
投票

您需要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;
© www.soinside.com 2019 - 2024. All rights reserved.