簡體   English   中英

用其他表列和序號創建表名

[英]create table name with other table column and sequence number oracle

創建一個清晰的日志過程,該過程每天都會刪除並插入到備份表中,我需要做的是在備份表達到一定行數之后,我希望我的工作(過程)創建一個具有相同字段的新表。

因此,我有一個表配置,其中包含需要備份的表,並且有一個名為pre_bck的列,該列具有我希望備份表具有的名稱。

所以我想嘗試創建一個程序,該程序將根據該'column'+the sequence number創建一個表

create table 'column_name'+sequence_id as select * from xyz where 1=0;

因此,例如,如果表名是abc且后繼ID是3,則表名將是abc3

對於我假裝要實現的目標,我不知道我是否清楚,任何幫助都將不勝感激。

我贊同亞歷克斯和貝尼斯特的觀點,認為這可能不是一個好方法。

但是,要回答您的問題:

將字符串的各個位粘合在一起的運算符是|| ,而不是其他語言中的+column_name || sequence_id column_name || sequence_id

要從過程中執行SQL,可以使用EXECUTE IMMEDIATE 'CREATE ...';

要從序列中進行選擇,您需要使用CREATE SEQUENCE my_sequence;創建它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部分的含義,但是您可以肯定地從這里獲取它...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM