[英]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.