高效能源监控管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

133 lines
4.4 KiB

CREATE OR REPLACE PROCEDURE pro_create_table()
RETURNS VOID AS $$
DECLARE
year VARCHAR(4);
sqlStr TEXT;
table_name VARCHAR(100);
is_exists INTEGER;
BEGIN
-- 获取当前年份
year := TO_CHAR(CURRENT_DATE, 'YYYY');
-- 判断是否存在 data_min + 当前年份 的表
table_name := 'data_min' || year;
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name;
IF is_exists = 0 THEN
sqlStr := 'CREATE TABLE ' || table_name || ' (
id BIGSERIAL PRIMARY KEY,
device_num VARCHAR(20),
device_code VARCHAR(20),
device_type VARCHAR(100),
last_value NUMERIC(24,2),
last_time TIMESTAMP,
cur_value NUMERIC(24,2),
cur_time TIMESTAMP,
used_value NUMERIC(24,2),
ratio INTEGER,
calc_value NUMERIC(24,2),
grade INTEGER,
UNIQUE (device_num, cur_time)
);
CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)';
RAISE NOTICE '%', sqlStr;
EXECUTE sqlStr;
END IF;
-- 判断是否存在 data_hour + 当前年份 的表
table_name := 'data_hour' || year;
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name;
IF is_exists = 0 THEN
sqlStr := 'CREATE TABLE ' || table_name || ' (
id BIGSERIAL PRIMARY KEY,
device_num VARCHAR(20),
device_code VARCHAR(20),
device_type VARCHAR(100),
last_value NUMERIC(24,2),
last_time TIMESTAMP,
cur_value NUMERIC(24,2),
cur_time TIMESTAMP,
used_value NUMERIC(24,2),
ratio INTEGER,
calc_value NUMERIC(24,2),
grade INTEGER,
UNIQUE (device_num, cur_time)
);
CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)';
RAISE NOTICE '%', sqlStr;
EXECUTE sqlStr;
END IF;
-- 判断是否存在 data_day + 当前年份 的表
table_name := 'data_day' || year;
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name;
IF is_exists = 0 THEN
sqlStr := 'CREATE TABLE ' || table_name || ' (
id BIGSERIAL PRIMARY KEY,
device_num VARCHAR(20),
device_code VARCHAR(20),
device_type VARCHAR(100),
last_value NUMERIC(24,2),
last_time TIMESTAMP,
cur_value NUMERIC(24,2),
cur_time TIMESTAMP,
used_value NUMERIC(24,2),
ratio INTEGER,
calc_value NUMERIC(24,2),
grade INTEGER,
UNIQUE (device_num, cur_time)
);
CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)';
RAISE NOTICE '%', sqlStr;
EXECUTE sqlStr;
END IF;
-- 判断是否存在 data_month 的表
table_name := 'data_month';
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name;
IF is_exists = 0 THEN
sqlStr := 'CREATE TABLE ' || table_name || ' (
id BIGSERIAL PRIMARY KEY,
device_num VARCHAR(20),
device_code VARCHAR(20),
device_type VARCHAR(100),
last_value NUMERIC(24,2),
last_time TIMESTAMP,
cur_value NUMERIC(24,2),
cur_time TIMESTAMP,
used_value NUMERIC(24,2),
ratio INTEGER,
calc_value NUMERIC(24,2),
grade INTEGER,
UNIQUE (device_num, cur_time)
);
CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)';
RAISE NOTICE '%', sqlStr;
EXECUTE sqlStr;
END IF;
-- 判断是否存在 data_year 的表
table_name := 'data_year';
SELECT COUNT(*) INTO is_exists FROM pg_tables WHERE tablename = table_name;
IF is_exists = 0 THEN
sqlStr := 'CREATE TABLE ' || table_name || ' (
id BIGSERIAL PRIMARY KEY,
device_num VARCHAR(20),
device_code VARCHAR(20),
device_type VARCHAR(100),
last_value NUMERIC(24,2),
last_time TIMESTAMP,
cur_value NUMERIC(24,2),
cur_time TIMESTAMP,
used_value NUMERIC(24,2),
ratio INTEGER,
calc_value NUMERIC(24,2),
grade INTEGER,
UNIQUE (device_num, cur_time)
);
CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)';
RAISE NOTICE '%', sqlStr;
EXECUTE sqlStr;
END IF;
END;
$$ LANGUAGE plpgsql;