王磊的个人技术记录 王磊的个人技术记录

记录精彩的程序人生

目录
oracle 循环建表方法(适用于按月拆表需要经常创建表的情况)
/  

oracle 循环建表方法(适用于按月拆表需要经常创建表的情况)

DECLARE
ACCTYEAR NUMBER(4):='2020'; ----建表年度
ACCTPERIOD VARCHAR2(2);
USER_TABLES_SQL VARCHAR2(100):='SELECT COUNT(1) FROM USER_TABLES WHERE TABLE_NAME = ''#TABLENAME#'' ';
PROC_UNCLEAREDITEM_TABLE_SQL VARCHAR2(300):='CREATE TABLE PROC_UNCLEAREDITEM_#PERIOD#( MDMPRCTR VARCHAR2(7), BUKRS VARCHAR2(4), GJAHR VARCHAR2(4), BELNR VARCHAR2(10), BUZEI VARCHAR2(3), HKONT VARCHAR2(10), DMBTR NUMBER(26,2), WRBTR NUMBER(26,2), ZFBDT VARCHAR2(8), SHKZG VARCHAR2(1))';
PROC_UNCLEAREDITEM_INDEX_SQL VARCHAR2(100):='CREATE INDEX IDX_PROC_UNCLEARED_P_G_#PERIOD# ON PROC_UNCLEAREDITEM_#PERIOD# (MDMPRCTR, GJAHR)';
I NUMBER :=1; --循环变量
COUNTNUMBER NUMBER; --查询USER_TABLES 返回的数量,如果为0则没有查到表
BEGIN
--按年按期间拆表SQL
WHILE I <= 12 LOOP
IF I < 10 THEN
ACCTPERIOD := '0'||I ;
ELSE
ACCTPERIOD := I ;
END IF;
-- 未清项表
EXECUTE IMMEDIATE REPLACE(USER_TABLES_SQL,'#TABLENAME#','PROC_UNCLEAREDITEM_'||ACCTYEAR||ACCTPERIOD) INTO COUNTNUMBER;
if COUNTNUMBER = 0 then
EXECUTE IMMEDIATE REPLACE(PROC_UNCLEAREDITEM_TABLE_SQL,'#PERIOD#',ACCTYEAR||ACCTPERIOD);
EXECUTE IMMEDIATE REPLACE(PROC_UNCLEAREDITEM_INDEX_SQL,'#PERIOD#',ACCTYEAR||ACCTPERIOD);
end if;
I := I + 1;
END LOOP;
END;


标题:oracle 循环建表方法(适用于按月拆表需要经常创建表的情况)
作者:wanglei03
地址:https://wangleijava.com/articles/2020/06/19/1592530510687.html