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.
		
		
		
		
		
			
		
			
				
					
					
						
							153 lines
						
					
					
						
							5.2 KiB
						
					
					
				
			
		
		
	
	
							153 lines
						
					
					
						
							5.2 KiB
						
					
					
				CREATE OR REPLACE PROCEDURE pro_create_chillers_table() | 
						|
RETURNS VOID AS $$ | 
						|
DECLARE | 
						|
year VARCHAR(4); | 
						|
    sqlStr TEXT; | 
						|
    table_name VARCHAR(100); | 
						|
    is_exists INTEGER; | 
						|
BEGIN | 
						|
    -- 获取当前年份 | 
						|
year := TO_CHAR(CURRENT_DATE, 'YYYY'); | 
						|
 | 
						|
    -- 判断是否存在表 chillers_data_min + year | 
						|
    table_name := 'chillers_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_code VARCHAR(20), | 
						|
            device_num VARCHAR(20), | 
						|
            collection_num VARCHAR(20), | 
						|
            register_address VARCHAR(50), | 
						|
            register_name VARCHAR(50), | 
						|
            fun_code VARCHAR(10), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time TIMESTAMP, | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time TIMESTAMP, | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            local_time TIMESTAMP, | 
						|
            grade INTEGER, | 
						|
            ddc_addr VARCHAR(50), | 
						|
            register_id INTEGER | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
    -- 判断是否存在表 chillers_data_hour + year | 
						|
    table_name := 'chillers_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_code VARCHAR(20), | 
						|
            device_num VARCHAR(20), | 
						|
            collection_num VARCHAR(20), | 
						|
            register_address VARCHAR(50), | 
						|
            register_name VARCHAR(50), | 
						|
            fun_code VARCHAR(10), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time VARCHAR(13), | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time VARCHAR(13), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            local_time TIMESTAMP, | 
						|
            grade INTEGER, | 
						|
            ddc_addr VARCHAR(50), | 
						|
            register_id INTEGER | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
    -- 判断是否存在表 chillers_data_day + year | 
						|
    table_name := 'chillers_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_code VARCHAR(20), | 
						|
            device_num VARCHAR(20), | 
						|
            collection_num VARCHAR(20), | 
						|
            register_address VARCHAR(50), | 
						|
            register_name VARCHAR(50), | 
						|
            fun_code VARCHAR(10), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time VARCHAR(10), | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time VARCHAR(10), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            local_time TIMESTAMP, | 
						|
            grade INTEGER, | 
						|
            ddc_addr VARCHAR(50), | 
						|
            register_id INTEGER | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
-- 判断是否存在表 chillers_data_month | 
						|
    table_name := 'chillers_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_code VARCHAR(20), | 
						|
            device_num VARCHAR(20), | 
						|
            collection_num VARCHAR(20), | 
						|
            register_address VARCHAR(50), | 
						|
            register_name VARCHAR(50), | 
						|
            fun_code VARCHAR(10), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time VARCHAR(10), | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time VARCHAR(10), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            local_time TIMESTAMP, | 
						|
            grade INTEGER, | 
						|
            ddc_addr VARCHAR(50), | 
						|
            register_id INTEGER | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
-- 判断是否存在表 chillers_data_year | 
						|
    table_name := 'chillers_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_code VARCHAR(20), | 
						|
            device_num VARCHAR(20), | 
						|
            collection_num VARCHAR(20), | 
						|
            register_address VARCHAR(50), | 
						|
            register_name VARCHAR(50), | 
						|
            fun_code VARCHAR(10), | 
						|
            last_value NUMERIC(24,2), | 
						|
            last_time VARCHAR(10), | 
						|
            cur_value NUMERIC(24,2), | 
						|
            cur_time VARCHAR(10), | 
						|
            ratio INTEGER, | 
						|
            calc_value NUMERIC(24,2), | 
						|
            local_time TIMESTAMP, | 
						|
            grade INTEGER, | 
						|
            ddc_addr VARCHAR(50), | 
						|
            register_id INTEGER | 
						|
        ); | 
						|
        CREATE INDEX cls_' || table_name || ' ON ' || table_name || ' (cur_time DESC)'; | 
						|
        RAISE NOTICE '%', sqlStr; | 
						|
EXECUTE sqlStr; | 
						|
END IF; | 
						|
 | 
						|
END; | 
						|
$$ LANGUAGE plpgsql;
 | 
						|
 |