text: DELETE from dcp_trans_day_map;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_01;
  DROP INDEX DCP_TRANS_ADDR_IDX_01;
  DROP INDEX DCP_TRANS_CHAN_IDX_01;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_01;
  
  DROP TABLE DCP_TRANS_DATA_01;
  DROP TABLE DCP_TRANS_01;
  
  CREATE TABLE DCP_TRANS_DATA_01
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_01
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_01
      ADD CONSTRAINT DCP_TRANS_DATA_FK_01
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_01 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_01 ON DCP_TRANS_DATA_01(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_01 ON DCP_TRANS_01(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_01 ON DCP_TRANS_01(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_01 ON DCP_TRANS_01(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('01', null);
  DROP SEQUENCE DCP_TRANS_01IDSEQ;
  CREATE SEQUENCE DCP_TRANS_01IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_02;
  DROP INDEX DCP_TRANS_ADDR_IDX_02;
  DROP INDEX DCP_TRANS_CHAN_IDX_02;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_02;
  
  DROP TABLE DCP_TRANS_DATA_02;
  DROP TABLE DCP_TRANS_02;
  
  CREATE TABLE DCP_TRANS_DATA_02
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_02
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_02
      ADD CONSTRAINT DCP_TRANS_DATA_FK_02
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_02 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_02 ON DCP_TRANS_DATA_02(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_02 ON DCP_TRANS_02(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_02 ON DCP_TRANS_02(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_02 ON DCP_TRANS_02(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('02', null);
  DROP SEQUENCE DCP_TRANS_02IDSEQ;
  CREATE SEQUENCE DCP_TRANS_02IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_03;
  DROP INDEX DCP_TRANS_ADDR_IDX_03;
  DROP INDEX DCP_TRANS_CHAN_IDX_03;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_03;
  
  DROP TABLE DCP_TRANS_DATA_03;
  DROP TABLE DCP_TRANS_03;
  
  CREATE TABLE DCP_TRANS_DATA_03
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_03
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_03
      ADD CONSTRAINT DCP_TRANS_DATA_FK_03
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_03 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_03 ON DCP_TRANS_DATA_03(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_03 ON DCP_TRANS_03(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_03 ON DCP_TRANS_03(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_03 ON DCP_TRANS_03(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('03', null);
  DROP SEQUENCE DCP_TRANS_03IDSEQ;
  CREATE SEQUENCE DCP_TRANS_03IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_04;
  DROP INDEX DCP_TRANS_ADDR_IDX_04;
  DROP INDEX DCP_TRANS_CHAN_IDX_04;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_04;
  
  DROP TABLE DCP_TRANS_DATA_04;
  DROP TABLE DCP_TRANS_04;
  
  CREATE TABLE DCP_TRANS_DATA_04
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_04
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_04
      ADD CONSTRAINT DCP_TRANS_DATA_FK_04
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_04 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_04 ON DCP_TRANS_DATA_04(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_04 ON DCP_TRANS_04(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_04 ON DCP_TRANS_04(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_04 ON DCP_TRANS_04(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('04', null);
  DROP SEQUENCE DCP_TRANS_04IDSEQ;
  CREATE SEQUENCE DCP_TRANS_04IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_05;
  DROP INDEX DCP_TRANS_ADDR_IDX_05;
  DROP INDEX DCP_TRANS_CHAN_IDX_05;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_05;
  
  DROP TABLE DCP_TRANS_DATA_05;
  DROP TABLE DCP_TRANS_05;
  
  CREATE TABLE DCP_TRANS_DATA_05
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_05
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_05
      ADD CONSTRAINT DCP_TRANS_DATA_FK_05
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_05 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_05 ON DCP_TRANS_DATA_05(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_05 ON DCP_TRANS_05(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_05 ON DCP_TRANS_05(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_05 ON DCP_TRANS_05(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('05', null);
  DROP SEQUENCE DCP_TRANS_05IDSEQ;
  CREATE SEQUENCE DCP_TRANS_05IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_06;
  DROP INDEX DCP_TRANS_ADDR_IDX_06;
  DROP INDEX DCP_TRANS_CHAN_IDX_06;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_06;
  
  DROP TABLE DCP_TRANS_DATA_06;
  DROP TABLE DCP_TRANS_06;
  
  CREATE TABLE DCP_TRANS_DATA_06
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_06
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_06
      ADD CONSTRAINT DCP_TRANS_DATA_FK_06
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_06 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_06 ON DCP_TRANS_DATA_06(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_06 ON DCP_TRANS_06(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_06 ON DCP_TRANS_06(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_06 ON DCP_TRANS_06(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('06', null);
  DROP SEQUENCE DCP_TRANS_06IDSEQ;
  CREATE SEQUENCE DCP_TRANS_06IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_07;
  DROP INDEX DCP_TRANS_ADDR_IDX_07;
  DROP INDEX DCP_TRANS_CHAN_IDX_07;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_07;
  
  DROP TABLE DCP_TRANS_DATA_07;
  DROP TABLE DCP_TRANS_07;
  
  CREATE TABLE DCP_TRANS_DATA_07
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_07
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_07
      ADD CONSTRAINT DCP_TRANS_DATA_FK_07
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_07 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_07 ON DCP_TRANS_DATA_07(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_07 ON DCP_TRANS_07(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_07 ON DCP_TRANS_07(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_07 ON DCP_TRANS_07(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('07', null);
  DROP SEQUENCE DCP_TRANS_07IDSEQ;
  CREATE SEQUENCE DCP_TRANS_07IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_08;
  DROP INDEX DCP_TRANS_ADDR_IDX_08;
  DROP INDEX DCP_TRANS_CHAN_IDX_08;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_08;
  
  DROP TABLE DCP_TRANS_DATA_08;
  DROP TABLE DCP_TRANS_08;
  
  CREATE TABLE DCP_TRANS_DATA_08
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_08
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_08
      ADD CONSTRAINT DCP_TRANS_DATA_FK_08
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_08 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_08 ON DCP_TRANS_DATA_08(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_08 ON DCP_TRANS_08(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_08 ON DCP_TRANS_08(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_08 ON DCP_TRANS_08(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('08', null);
  DROP SEQUENCE DCP_TRANS_08IDSEQ;
  CREATE SEQUENCE DCP_TRANS_08IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_09;
  DROP INDEX DCP_TRANS_ADDR_IDX_09;
  DROP INDEX DCP_TRANS_CHAN_IDX_09;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_09;
  
  DROP TABLE DCP_TRANS_DATA_09;
  DROP TABLE DCP_TRANS_09;
  
  CREATE TABLE DCP_TRANS_DATA_09
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_09
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_09
      ADD CONSTRAINT DCP_TRANS_DATA_FK_09
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_09 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_09 ON DCP_TRANS_DATA_09(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_09 ON DCP_TRANS_09(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_09 ON DCP_TRANS_09(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_09 ON DCP_TRANS_09(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('09', null);
  DROP SEQUENCE DCP_TRANS_09IDSEQ;
  CREATE SEQUENCE DCP_TRANS_09IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_10;
  DROP INDEX DCP_TRANS_ADDR_IDX_10;
  DROP INDEX DCP_TRANS_CHAN_IDX_10;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_10;
  
  DROP TABLE DCP_TRANS_DATA_10;
  DROP TABLE DCP_TRANS_10;
  
  CREATE TABLE DCP_TRANS_DATA_10
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_10
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_10
      ADD CONSTRAINT DCP_TRANS_DATA_FK_10
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_10 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_10 ON DCP_TRANS_DATA_10(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_10 ON DCP_TRANS_10(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_10 ON DCP_TRANS_10(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_10 ON DCP_TRANS_10(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('10', null);
  DROP SEQUENCE DCP_TRANS_10IDSEQ;
  CREATE SEQUENCE DCP_TRANS_10IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_11;
  DROP INDEX DCP_TRANS_ADDR_IDX_11;
  DROP INDEX DCP_TRANS_CHAN_IDX_11;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_11;
  
  DROP TABLE DCP_TRANS_DATA_11;
  DROP TABLE DCP_TRANS_11;
  
  CREATE TABLE DCP_TRANS_DATA_11
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_11
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_11
      ADD CONSTRAINT DCP_TRANS_DATA_FK_11
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_11 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_11 ON DCP_TRANS_DATA_11(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_11 ON DCP_TRANS_11(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_11 ON DCP_TRANS_11(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_11 ON DCP_TRANS_11(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('11', null);
  DROP SEQUENCE DCP_TRANS_11IDSEQ;
  CREATE SEQUENCE DCP_TRANS_11IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_12;
  DROP INDEX DCP_TRANS_ADDR_IDX_12;
  DROP INDEX DCP_TRANS_CHAN_IDX_12;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_12;
  
  DROP TABLE DCP_TRANS_DATA_12;
  DROP TABLE DCP_TRANS_12;
  
  CREATE TABLE DCP_TRANS_DATA_12
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_12
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_12
      ADD CONSTRAINT DCP_TRANS_DATA_FK_12
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_12 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_12 ON DCP_TRANS_DATA_12(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_12 ON DCP_TRANS_12(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_12 ON DCP_TRANS_12(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_12 ON DCP_TRANS_12(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('12', null);
  DROP SEQUENCE DCP_TRANS_12IDSEQ;
  CREATE SEQUENCE DCP_TRANS_12IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_13;
  DROP INDEX DCP_TRANS_ADDR_IDX_13;
  DROP INDEX DCP_TRANS_CHAN_IDX_13;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_13;
  
  DROP TABLE DCP_TRANS_DATA_13;
  DROP TABLE DCP_TRANS_13;
  
  CREATE TABLE DCP_TRANS_DATA_13
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_13
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_13
      ADD CONSTRAINT DCP_TRANS_DATA_FK_13
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_13 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_13 ON DCP_TRANS_DATA_13(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_13 ON DCP_TRANS_13(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_13 ON DCP_TRANS_13(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_13 ON DCP_TRANS_13(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('13', null);
  DROP SEQUENCE DCP_TRANS_13IDSEQ;
  CREATE SEQUENCE DCP_TRANS_13IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_14;
  DROP INDEX DCP_TRANS_ADDR_IDX_14;
  DROP INDEX DCP_TRANS_CHAN_IDX_14;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_14;
  
  DROP TABLE DCP_TRANS_DATA_14;
  DROP TABLE DCP_TRANS_14;
  
  CREATE TABLE DCP_TRANS_DATA_14
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_14
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_14
      ADD CONSTRAINT DCP_TRANS_DATA_FK_14
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_14 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_14 ON DCP_TRANS_DATA_14(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_14 ON DCP_TRANS_14(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_14 ON DCP_TRANS_14(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_14 ON DCP_TRANS_14(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('14', null);
  DROP SEQUENCE DCP_TRANS_14IDSEQ;
  CREATE SEQUENCE DCP_TRANS_14IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_15;
  DROP INDEX DCP_TRANS_ADDR_IDX_15;
  DROP INDEX DCP_TRANS_CHAN_IDX_15;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_15;
  
  DROP TABLE DCP_TRANS_DATA_15;
  DROP TABLE DCP_TRANS_15;
  
  CREATE TABLE DCP_TRANS_DATA_15
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_15
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_15
      ADD CONSTRAINT DCP_TRANS_DATA_FK_15
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_15 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_15 ON DCP_TRANS_DATA_15(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_15 ON DCP_TRANS_15(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_15 ON DCP_TRANS_15(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_15 ON DCP_TRANS_15(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('15', null);
  DROP SEQUENCE DCP_TRANS_15IDSEQ;
  CREATE SEQUENCE DCP_TRANS_15IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_16;
  DROP INDEX DCP_TRANS_ADDR_IDX_16;
  DROP INDEX DCP_TRANS_CHAN_IDX_16;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_16;
  
  DROP TABLE DCP_TRANS_DATA_16;
  DROP TABLE DCP_TRANS_16;
  
  CREATE TABLE DCP_TRANS_DATA_16
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_16
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_16
      ADD CONSTRAINT DCP_TRANS_DATA_FK_16
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_16 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_16 ON DCP_TRANS_DATA_16(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_16 ON DCP_TRANS_16(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_16 ON DCP_TRANS_16(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_16 ON DCP_TRANS_16(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('16', null);
  DROP SEQUENCE DCP_TRANS_16IDSEQ;
  CREATE SEQUENCE DCP_TRANS_16IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_17;
  DROP INDEX DCP_TRANS_ADDR_IDX_17;
  DROP INDEX DCP_TRANS_CHAN_IDX_17;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_17;
  
  DROP TABLE DCP_TRANS_DATA_17;
  DROP TABLE DCP_TRANS_17;
  
  CREATE TABLE DCP_TRANS_DATA_17
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_17
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_17
      ADD CONSTRAINT DCP_TRANS_DATA_FK_17
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_17 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_17 ON DCP_TRANS_DATA_17(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_17 ON DCP_TRANS_17(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_17 ON DCP_TRANS_17(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_17 ON DCP_TRANS_17(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('17', null);
  DROP SEQUENCE DCP_TRANS_17IDSEQ;
  CREATE SEQUENCE DCP_TRANS_17IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_18;
  DROP INDEX DCP_TRANS_ADDR_IDX_18;
  DROP INDEX DCP_TRANS_CHAN_IDX_18;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_18;
  
  DROP TABLE DCP_TRANS_DATA_18;
  DROP TABLE DCP_TRANS_18;
  
  CREATE TABLE DCP_TRANS_DATA_18
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_18
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_18
      ADD CONSTRAINT DCP_TRANS_DATA_FK_18
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_18 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_18 ON DCP_TRANS_DATA_18(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_18 ON DCP_TRANS_18(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_18 ON DCP_TRANS_18(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_18 ON DCP_TRANS_18(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('18', null);
  DROP SEQUENCE DCP_TRANS_18IDSEQ;
  CREATE SEQUENCE DCP_TRANS_18IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_19;
  DROP INDEX DCP_TRANS_ADDR_IDX_19;
  DROP INDEX DCP_TRANS_CHAN_IDX_19;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_19;
  
  DROP TABLE DCP_TRANS_DATA_19;
  DROP TABLE DCP_TRANS_19;
  
  CREATE TABLE DCP_TRANS_DATA_19
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_19
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_19
      ADD CONSTRAINT DCP_TRANS_DATA_FK_19
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_19 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_19 ON DCP_TRANS_DATA_19(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_19 ON DCP_TRANS_19(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_19 ON DCP_TRANS_19(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_19 ON DCP_TRANS_19(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('19', null);
  DROP SEQUENCE DCP_TRANS_19IDSEQ;
  CREATE SEQUENCE DCP_TRANS_19IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_20;
  DROP INDEX DCP_TRANS_ADDR_IDX_20;
  DROP INDEX DCP_TRANS_CHAN_IDX_20;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_20;
  
  DROP TABLE DCP_TRANS_DATA_20;
  DROP TABLE DCP_TRANS_20;
  
  CREATE TABLE DCP_TRANS_DATA_20
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_20
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_20
      ADD CONSTRAINT DCP_TRANS_DATA_FK_20
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_20 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_20 ON DCP_TRANS_DATA_20(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_20 ON DCP_TRANS_20(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_20 ON DCP_TRANS_20(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_20 ON DCP_TRANS_20(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('20', null);
  DROP SEQUENCE DCP_TRANS_20IDSEQ;
  CREATE SEQUENCE DCP_TRANS_20IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_21;
  DROP INDEX DCP_TRANS_ADDR_IDX_21;
  DROP INDEX DCP_TRANS_CHAN_IDX_21;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_21;
  
  DROP TABLE DCP_TRANS_DATA_21;
  DROP TABLE DCP_TRANS_21;
  
  CREATE TABLE DCP_TRANS_DATA_21
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_21
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_21
      ADD CONSTRAINT DCP_TRANS_DATA_FK_21
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_21 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_21 ON DCP_TRANS_DATA_21(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_21 ON DCP_TRANS_21(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_21 ON DCP_TRANS_21(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_21 ON DCP_TRANS_21(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('21', null);
  DROP SEQUENCE DCP_TRANS_21IDSEQ;
  CREATE SEQUENCE DCP_TRANS_21IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_22;
  DROP INDEX DCP_TRANS_ADDR_IDX_22;
  DROP INDEX DCP_TRANS_CHAN_IDX_22;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_22;
  
  DROP TABLE DCP_TRANS_DATA_22;
  DROP TABLE DCP_TRANS_22;
  
  CREATE TABLE DCP_TRANS_DATA_22
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_22
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_22
      ADD CONSTRAINT DCP_TRANS_DATA_FK_22
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_22 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_22 ON DCP_TRANS_DATA_22(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_22 ON DCP_TRANS_22(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_22 ON DCP_TRANS_22(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_22 ON DCP_TRANS_22(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('22', null);
  DROP SEQUENCE DCP_TRANS_22IDSEQ;
  CREATE SEQUENCE DCP_TRANS_22IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_23;
  DROP INDEX DCP_TRANS_ADDR_IDX_23;
  DROP INDEX DCP_TRANS_CHAN_IDX_23;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_23;
  
  DROP TABLE DCP_TRANS_DATA_23;
  DROP TABLE DCP_TRANS_23;
  
  CREATE TABLE DCP_TRANS_DATA_23
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_23
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_23
      ADD CONSTRAINT DCP_TRANS_DATA_FK_23
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_23 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_23 ON DCP_TRANS_DATA_23(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_23 ON DCP_TRANS_23(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_23 ON DCP_TRANS_23(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_23 ON DCP_TRANS_23(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('23', null);
  DROP SEQUENCE DCP_TRANS_23IDSEQ;
  CREATE SEQUENCE DCP_TRANS_23IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_24;
  DROP INDEX DCP_TRANS_ADDR_IDX_24;
  DROP INDEX DCP_TRANS_CHAN_IDX_24;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_24;
  
  DROP TABLE DCP_TRANS_DATA_24;
  DROP TABLE DCP_TRANS_24;
  
  CREATE TABLE DCP_TRANS_DATA_24
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_24
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_24
      ADD CONSTRAINT DCP_TRANS_DATA_FK_24
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_24 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_24 ON DCP_TRANS_DATA_24(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_24 ON DCP_TRANS_24(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_24 ON DCP_TRANS_24(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_24 ON DCP_TRANS_24(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('24', null);
  DROP SEQUENCE DCP_TRANS_24IDSEQ;
  CREATE SEQUENCE DCP_TRANS_24IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_25;
  DROP INDEX DCP_TRANS_ADDR_IDX_25;
  DROP INDEX DCP_TRANS_CHAN_IDX_25;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_25;
  
  DROP TABLE DCP_TRANS_DATA_25;
  DROP TABLE DCP_TRANS_25;
  
  CREATE TABLE DCP_TRANS_DATA_25
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_25
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_25
      ADD CONSTRAINT DCP_TRANS_DATA_FK_25
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_25 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_25 ON DCP_TRANS_DATA_25(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_25 ON DCP_TRANS_25(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_25 ON DCP_TRANS_25(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_25 ON DCP_TRANS_25(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('25', null);
  DROP SEQUENCE DCP_TRANS_25IDSEQ;
  CREATE SEQUENCE DCP_TRANS_25IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_26;
  DROP INDEX DCP_TRANS_ADDR_IDX_26;
  DROP INDEX DCP_TRANS_CHAN_IDX_26;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_26;
  
  DROP TABLE DCP_TRANS_DATA_26;
  DROP TABLE DCP_TRANS_26;
  
  CREATE TABLE DCP_TRANS_DATA_26
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_26
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_26
      ADD CONSTRAINT DCP_TRANS_DATA_FK_26
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_26 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_26 ON DCP_TRANS_DATA_26(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_26 ON DCP_TRANS_26(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_26 ON DCP_TRANS_26(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_26 ON DCP_TRANS_26(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('26', null);
  DROP SEQUENCE DCP_TRANS_26IDSEQ;
  CREATE SEQUENCE DCP_TRANS_26IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_27;
  DROP INDEX DCP_TRANS_ADDR_IDX_27;
  DROP INDEX DCP_TRANS_CHAN_IDX_27;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_27;
  
  DROP TABLE DCP_TRANS_DATA_27;
  DROP TABLE DCP_TRANS_27;
  
  CREATE TABLE DCP_TRANS_DATA_27
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_27
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_27
      ADD CONSTRAINT DCP_TRANS_DATA_FK_27
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_27 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_27 ON DCP_TRANS_DATA_27(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_27 ON DCP_TRANS_27(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_27 ON DCP_TRANS_27(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_27 ON DCP_TRANS_27(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('27', null);
  DROP SEQUENCE DCP_TRANS_27IDSEQ;
  CREATE SEQUENCE DCP_TRANS_27IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_28;
  DROP INDEX DCP_TRANS_ADDR_IDX_28;
  DROP INDEX DCP_TRANS_CHAN_IDX_28;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_28;
  
  DROP TABLE DCP_TRANS_DATA_28;
  DROP TABLE DCP_TRANS_28;
  
  CREATE TABLE DCP_TRANS_DATA_28
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_28
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_28
      ADD CONSTRAINT DCP_TRANS_DATA_FK_28
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_28 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_28 ON DCP_TRANS_DATA_28(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_28 ON DCP_TRANS_28(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_28 ON DCP_TRANS_28(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_28 ON DCP_TRANS_28(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('28', null);
  DROP SEQUENCE DCP_TRANS_28IDSEQ;
  CREATE SEQUENCE DCP_TRANS_28IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_29;
  DROP INDEX DCP_TRANS_ADDR_IDX_29;
  DROP INDEX DCP_TRANS_CHAN_IDX_29;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_29;
  
  DROP TABLE DCP_TRANS_DATA_29;
  DROP TABLE DCP_TRANS_29;
  
  CREATE TABLE DCP_TRANS_DATA_29
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_29
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_29
      ADD CONSTRAINT DCP_TRANS_DATA_FK_29
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_29 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_29 ON DCP_TRANS_DATA_29(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_29 ON DCP_TRANS_29(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_29 ON DCP_TRANS_29(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_29 ON DCP_TRANS_29(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('29', null);
  DROP SEQUENCE DCP_TRANS_29IDSEQ;
  CREATE SEQUENCE DCP_TRANS_29IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_30;
  DROP INDEX DCP_TRANS_ADDR_IDX_30;
  DROP INDEX DCP_TRANS_CHAN_IDX_30;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_30;
  
  DROP TABLE DCP_TRANS_DATA_30;
  DROP TABLE DCP_TRANS_30;
  
  CREATE TABLE DCP_TRANS_DATA_30
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_30
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_30
      ADD CONSTRAINT DCP_TRANS_DATA_FK_30
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_30 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_30 ON DCP_TRANS_DATA_30(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_30 ON DCP_TRANS_30(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_30 ON DCP_TRANS_30(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_30 ON DCP_TRANS_30(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('30', null);
  DROP SEQUENCE DCP_TRANS_30IDSEQ;
  CREATE SEQUENCE DCP_TRANS_30IDSEQ nocache;
  DROP INDEX DCP_TRANS_DATA_REC_IDX_31;
  DROP INDEX DCP_TRANS_ADDR_IDX_31;
  DROP INDEX DCP_TRANS_CHAN_IDX_31;
  DROP INDEX DCP_TRANS_MEDIUM_TYPE_31;
  
  DROP TABLE DCP_TRANS_DATA_31;
  DROP TABLE DCP_TRANS_31;
  
  CREATE TABLE DCP_TRANS_DATA_31
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	BLOCK_NUM INT NOT NULL,
  	MSG_DATA VARCHAR2(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID, BLOCK_NUM)
  ) &TBL_SPACE_SPEC;
  
  CREATE TABLE DCP_TRANS_31
  (
  	RECORD_ID NUMBER(18) NOT NULL,
  	-- 'G' = GOES, 'L' = Data Logger, 'I' = Iridium.
  	-- This field determines how the header should be parsed.
  	MEDIUM_TYPE VARCHAR2(1) NOT NULL,
  	MEDIUM_ID VARCHAR2(64) NOT NULL,
  	LOCAL_RECV_TIME NUMBER(19) NOT NULL,
  	TRANSMIT_TIME NUMBER(19) NOT NULL,
  	FAILURE_CODES VARCHAR2(8) NOT NULL,
  	-- Second of day when the transmit window started
  	WINDOW_START_SOD INT,
  	-- Transmit window length in seconds
  	WINDOW_LENGTH INT,
  	XMIT_INTERVAL INT,
  	CARRIER_START NUMBER(19),
  	CARRIER_STOP NUMBER(19),
  	FLAGS INT NOT NULL,
  	CHANNEL INT NOT NULL,
  	BATTERY DOUBLE PRECISION,
      MSG_LENGTH INT NOT NULL,
      -- First block of data. Very long messages will have additional blocks.
      MSG_DATA VARCHAR(4000) NOT NULL,
  	PRIMARY KEY (RECORD_ID)
  ) &TBL_SPACE_SPEC;
  
  ALTER TABLE DCP_TRANS_DATA_31
      ADD CONSTRAINT DCP_TRANS_DATA_FK_31
  	FOREIGN KEY (RECORD_ID)
      REFERENCES DCP_TRANS_31 (RECORD_ID)
  ;
  
  CREATE INDEX DCP_TRANS_DATA_REC_IDX_31 ON DCP_TRANS_DATA_31(RECORD_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_ADDR_IDX_31 ON DCP_TRANS_31(MEDIUM_TYPE, MEDIUM_ID) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_CHAN_IDX_31 ON DCP_TRANS_31(CHANNEL) &TBL_SPACE_SPEC;
  CREATE INDEX DCP_TRANS_MEDIUM_TYPE_31 ON DCP_TRANS_31(MEDIUM_TYPE) &TBL_SPACE_SPEC;
  
  INSERT INTO DCP_TRANS_DAY_MAP VALUES('31', null);
  DROP SEQUENCE DCP_TRANS_31IDSEQ;
  CREATE SEQUENCE DCP_TRANS_31IDSEQ nocache;
  