【问题标题】: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 不鼓励使用integer 和float(支持number),而支持char 支持varchar2。而且我认为您的代码更常见的是这样编写的:
BEGIN
FOR my_num in 1..5 LOOP
execute immediate 'create table No_' || my_num || ' (dists number)';
END LOOP;
END;