注意,begin end 代码块在dbvisualizer 执行前要加 --/ 后面要加 /
--/
BEGIN
DECLARE v_i INTEGER ;
declare sqlStr varchar(1000);
set v_i=1;
REPEAT
SET sqlStr ='CREATE TABLE A_TEST'|| v_i||' (
ID BIGINT NOT NULL
) ' ;
EXECUTE IMMEDIATE sqlStr;
SET v_i = v_i + 1;
UNTIL (v_i > 3)
END REPEAT;
END
/
该语句块的作用是在循环创建表,表名是带有数字变量拼接而成的,该语句可以直接放到dbvisualizer 中执行
下面是我业务需要使用的begin end 语句块,动态创建表,和注释
注意事项 :
1、EXECUTE IMMEDIATE 后的sql 语句中不要含有分号;
2、字段注释sql 中的汉字,首尾用单引号包起来的,这个单引号需要转义,转义方式是单引号前加一个单引号(例: '')
--/
BEGIN
DECLARE v_i INTEGER ;
declare sqlStr varchar(2000);
declare sqlcomments_1 varchar(500);
declare sqlcomments_2 varchar(500);
declare sqlcomments_3 varchar(500);
declare sqlcomments_4 varchar(500);
declare sqlcomments_5 varchar(500);
declare sqlcomments_6 varchar(500);
declare sqlcomments_7 varchar(500);
declare sqlcomments_8 varchar(500);
declare sqlcomments_9 varchar(500);
declare sqlcomments_10 varchar(500);
declare sqlcomments_11 varchar(500);
declare sqlcomments_12 varchar(500);
declare sqlcomments_13 varchar(500);
declare sqlcomments_14 varchar(500);
declare sqlcomments_15 varchar(500);
declare sqlcomments_16 varchar(500);
set v_i=2014;
REPEAT
SET sqlStr = 'CREATE TABLE
FUND_DAILY_INCOME_'||v_i||'
(
ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY,
ACCOUNT_NO VARCHAR(32),
CREATED_TIME TIMESTAMP,
FUND_CODE VARCHAR(8),
SHARE_HOLDING VARCHAR(15),
INCOME_DATE VARCHAR(10),
INCOME_AMOUNT BIGINT,
MERGE_FLAG VARCHAR(1),
OFFSET_FLAG VARCHAR(1),
UPDATE_TIME TIMESTAMP,
COMPANY_CODE VARCHAR(16),
ALL_INCOME DECIMAL(19,0) DEFAULT 0,
HOLDING_INCOME DECIMAL(19,0) DEFAULT 0,
SERVICE_TYPE VARCHAR(2),
PLAT_ID BIGINT,
SERVICE_CODE VARCHAR(32),
PRIMARY KEY (ID)
)' ;
set sqlcomments_1 = 'COMMENT ON TABLE FUND_DAILY_INCOME_'||v_i||' IS ''用户每日收益表'' ';
set sqlcomments_2 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.ACCOUNT_NO IS ''户头号'' ';
set sqlcomments_3 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.FUND_CODE IS ''基金编号'' ' ;
set sqlcomments_4 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.INCOME_DATE IS ''收益日期''' ;
set sqlcomments_5 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.INCOME_AMOUNT IS ''收益(分)''';
set sqlcomments_6 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.MERGE_FLAG IS ''合计到累计收益标志''';
set sqlcomments_7 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.OFFSET_FLAG IS ''是否是调账标志''';
set sqlcomments_8 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.UPDATE_TIME IS ''更新时间''';
set sqlcomments_9 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.COMPANY_CODE IS ''基金公司商户号''';
set sqlcomments_10 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.ALL_INCOME IS ''累计收益''';
set sqlcomments_11 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.HOLDING_INCOME IS ''持有收益''';
set sqlcomments_12 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.SERVICE_TYPE IS ''业务类型 01-普通基金,02-智投组合,03-目标赢''';
set sqlcomments_13 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.PLAT_ID IS ''销售平台ID 10000-默认苏宁金融''' ;
set sqlcomments_14 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.SERVICE_CODE IS ''业务编码 10000-默认基金超市''' ;
set sqlcomments_15 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.SHARE_HOLDING IS ''持有份额''';
set sqlcomments_16 = 'COMMENT ON COLUMN FUND_DAILY_INCOME_'||v_i||'.CREATED_TIME IS ''创建时间''';
EXECUTE IMMEDIATE sqlStr;
EXECUTE IMMEDIATE sqlcomments_1;
EXECUTE IMMEDIATE sqlcomments_2;
EXECUTE IMMEDIATE sqlcomments_3;
EXECUTE IMMEDIATE sqlcomments_4;
EXECUTE IMMEDIATE sqlcomments_5;
EXECUTE IMMEDIATE sqlcomments_6;
EXECUTE IMMEDIATE sqlcomments_7;
EXECUTE IMMEDIATE sqlcomments_8;
EXECUTE IMMEDIATE sqlcomments_9;
EXECUTE IMMEDIATE sqlcomments_10;
EXECUTE IMMEDIATE sqlcomments_11;
EXECUTE IMMEDIATE sqlcomments_12;
EXECUTE IMMEDIATE sqlcomments_13;
EXECUTE IMMEDIATE sqlcomments_14;
EXECUTE IMMEDIATE sqlcomments_15;
EXECUTE IMMEDIATE sqlcomments_16;
SET v_i = v_i + 1;
UNTIL (v_i > 2016)
END REPEAT;
END
/