 -- Licensed to the Apache Software Foundation (ASF) under one or more
 -- contributor license agreements.  See the NOTICE file distributed with
 -- this work for additional information regarding copyright ownership.
 -- The ASF licenses this file to You under the Apache License, Version 2.0
 -- (the "License"); you may not use this file except in compliance with
 -- the License.  You may obtain a copy of the License at
 --
 --     http://www.apache.org/licenses/LICENSE-2.0
 --
 -- Unless required by applicable law or agreed to in writing, software
 -- distributed under the License is distributed on an "AS IS" BASIS,
 -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 -- See the License for the specific language governing permissions and
 -- limitations under the License.
 
DROP TABLE CatalogServiceMapper IF EXISTS;

CREATE TABLE CatalogServiceMapper (
  CAT_SERV_TRANS_ID VARCHAR(255) NOT NULL ,
  CAT_SERV_TRANS_FACTORY VARCHAR(255) NOT NULL ,
  CAT_TRANS_ID VARCHAR(255) NOT NULL ,
  CAT_TRANS_FACTORY VARCHAR(255) NOT NULL ,
  CAT_TRANS_DATE VARCHAR(255) NOT NULL ,
  CATALOG_ID VARCHAR(255) NOT NULL
);

