用其他表列和序号创建表名

时间:2018-10-30 11:22:56

标签: sql oracle plsql oracle11g

创建一个清晰的日志过程,每天将其删除并插入到备份表中,我需要做的是在备份表达到一定行数之后,我希望我的工作(过程)使用以下命令创建一个新表:相同的字段。

因此,我有一个表配置,其中标识了需要备份的表,并且有一个名为pre_bck的列,其名称是我希望备份表具有的名称。

所以我想尝试执行一个程序,该程序将根据该'column'+the sequence number

创建一个表
create table 'column_name'+sequence_id as select * from xyz where 1=0;

例如,如果表名称为abc且序号为3,则表名称为abc3

我不知道自己是否清楚地假装要实施什么,将不胜感激。

1 个答案:

答案 0 :(得分:4)

我同意亚历克斯和贝尼斯特的观点,认为这可能不是一个好方法。

但是,要回答您的问题:

将字符串的各个位粘合在一起的运算符是||,而不是+,就像其他语言一样:column_name || sequence_id

要在过程中执行SQL,可以使用EXECUTE IMMEDIATE 'CREATE ...';

要从序列中进行选择,您需要使用CREATE SEQUENCE my_sequence;创建它。要获取值:my_sequence.nextval

循环遍历配置表中所有行的最简单方法是FOR IN ... LOOP

CREATE OR REPLACE PROCEDURE my_procedure IS
  stmt VARCHAR2(32000);
BEGIN
  FOR r IN (SELECT * FROM my_config_table ORDER BY xxx) LOOP
    stmt := 'CREATE TABLE ' || pre_bck || my_sequence.nextval || 
            ' AS SELECT * FROM xyz WHERE 1=0';
    EXECUTE IMMEDIATE stmt;
  END LOOP;
END my_procedure;
/

我不清楚xyz部分的含义,但是您可以肯定地从这里开始使用它...