MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/md/admin/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/md/admin/sdoepsgl2.plb

@@?/rdbms/admin/sqlsessstart.sql
declare
  stm VARCHAR2(10000);
  rec_count NUMBER;
begin


  select count(*) into rec_count
  from sys.con$ c, sys.all_users u, sys.cdef$ cd, sys.obj$ o
  where c.name = 'COORD_OPERATION_FOREIGN_LEGACY' and
        c.owner# = u.user_id and
        u.username = 'MDSYS' and
        c.con# = cd.con# and
        cd.obj# = o.obj# and
        bitand(o.flags, 128) = 0;
  if(rec_count = 0) then
    stm :=
      'ALTER TABLE MDSYS.SDO_COORD_OPS ADD (
        CONSTRAINT COORD_OPERATION_FOREIGN_LEGACY FOREIGN KEY(LEGACY_CODE) REFERENCES MDSYS.SDO_COORD_OPS(COORD_OP_ID),
        CONSTRAINT COORD_OP_NAME_UNIQUE UNIQUE(COORD_OP_NAME),
        CONSTRAINT COORD_OP_NAME_NO_LEGACY_NAME CHECK(
          COORD_OP_NAME NOT IN (
            ''Geographic (Lat/Long)'',
            ''Universal Transverse Mercator'',
            ''State Plane Coordinates'',
            ''Albers Conical Equal Area'',
            ''Lambert Conformal Conic'',
            ''Mercator'',
            ''Polar Stereographic'',
            ''Polyconic'',
            ''Equidistant Conic'',
            ''Transverse Mercator'',
            ''Stereographic'',
            ''Lambert Azimuthal Equal Area'',
            ''Azimuthal Equidistant'',
            ''Gnomonic'',
            ''Orthographic'',
            ''General Vertical Near-Side Perspective'',
            ''Sinusoidal'',
            ''Equirectangular'',
            ''Miller Cylindrical'',
            ''Van der Grinten'',
            ''Hotine Oblique Mercator'',
            ''Robinson'',
            ''Space Oblique Mercator'',
            ''Alaska Conformal'',
            ''Interrupted Goode Homolosine'',
            ''Mollweide'',
            ''Interrupted Mollweide'',
            ''Hammer'',
            ''Wagner IV'',
            ''Wagner VII'',
            ''Oblated Equal Area'',
            ''Non-earth'',
            ''Transverse Mercator Danish System 45 Bornholm'',
            ''Transverse Mercator Danish System 34 Jylland-Fyn'',
            ''Transverse Mercator Sjaelland'',
            ''Transverse Mercator Finnish KKJ'',
            ''Eckert IV'',
            ''Eckert VI'',
            ''Gall'',
            ''Lambert Conformal Conic (Belgium 1972)'',
            ''New Zealand Map Grid'',
            ''Cylindrical Equal Area'',
            ''Swiss Oblique Mercator'',
            ''Bonne'',
            ''Cassini'')))';
    execute immediate stm;
  end if;
end;
/
commit;
declare
  stm VARCHAR2(10000);
  rec_count NUMBER;
begin


  select count(*) into rec_count
  from sys.con$ c, sys.all_users u, sys.cdef$ cd, sys.obj$ o
  where c.name = 'COORD_REF_SYS_FOREIGN_PROJ' and
        c.owner# = u.user_id and
        u.username = 'MDSYS' and
        c.con# = cd.con# and
        cd.obj# = o.obj# and
        bitand(o.flags, 128) = 0;
  if(rec_count = 0) then
    stm :=
      
      'ALTER TABLE MDSYS.SDO_COORD_REF_SYS
      ADD (
        CONSTRAINT COORD_REF_SYS_FOREIGN_PROJ FOREIGN KEY(PROJECTION_CONV_ID) REFERENCES MDSYS.SDO_COORD_OPS(COORD_OP_ID),
        CONSTRAINT COORD_REF_SYS_FOREIGN_LEGACY FOREIGN KEY(LEGACY_CODE) REFERENCES MDSYS.SDO_COORD_REF_SYS(SRID),
        CONSTRAINT COORD_REF_SYS_FOREIGN_GEOG FOREIGN KEY(SOURCE_GEOG_SRID) REFERENCES MDSYS.SDO_COORD_REF_SYS(SRID),
        CONSTRAINT COORD_REF_SYS_FOREIGN_HORIZ FOREIGN KEY(CMPD_HORIZ_SRID) REFERENCES MDSYS.SDO_COORD_REF_SYS(SRID),
        CONSTRAINT COORD_REF_SYS_FOREIGN_VERT FOREIGN KEY(CMPD_VERT_SRID) REFERENCES MDSYS.SDO_COORD_REF_SYS(SRID))';
    execute immediate stm;
  end if;
end;
/
commit;
declare
  stm VARCHAR2(10000);
  rec_count NUMBER;
begin


  select count(*) into rec_count
  from sys.con$ c, sys.all_users u, sys.cdef$ cd, sys.obj$ o
  where c.name = 'PREFERRED_OPS_SYS_PRIM' and
        c.owner# = u.user_id and
        u.username = 'MDSYS' and
        c.con# = cd.con# and
        cd.obj# = o.obj# and
        bitand(o.flags, 128) = 0;
  if(rec_count = 0) then
    stm :=
      'ALTER TABLE MDSYS.SDO_PREFERRED_OPS_SYSTEM ADD (
        CONSTRAINT PREFERRED_OPS_SYS_PRIM PRIMARY KEY(SOURCE_SRID, TARGET_SRID) USING INDEX)';
    execute immediate stm;
  end if;
end;
/
commit;
CREATE OR REPLACE TRIGGER
  MDSYS.SDO_PREFERRED_OPS_SYS_TRIGGER
BEFORE
  INSERT OR
  UPDATE
ON
  MDSYS.SDO_PREFERRED_OPS_SYSTEM
FOR EACH ROW
DECLARE
  c NUMBER;
BEGIN

  MDSYS.sdo_cs.sdo_cs_context_invalidate;

  SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_OPS WHERE COORD_OP_ID = :new.COORD_OP_ID;
  IF(c < 1) THEN
    IF(:new.COORD_OP_ID > 0) THEN
      MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.COORD_OP_ID || ' does not exist.'));
    ELSE
      SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_OPS WHERE COORD_OP_ID = -:new.COORD_OP_ID;
      IF(c < 1) THEN
        MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.COORD_OP_ID || ' does not exist, neither does its forward version ' || -:new.COORD_OP_ID || '.'));
      ELSE
        SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_NON_ELEM_OPS WHERE COORD_OP_ID = -:new.COORD_OP_ID;
        IF(c < 1) THEN
          MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Elementary operation ' || -:new.COORD_OP_ID || ' is not reversible.'));
        ELSE
          dbms_output.put_line('Concatenated operation ' || -:new.COORD_OP_ID || ' is not reversible, because of its following elementary component(s):');

          <<FIND_CULPRITS>>
          DECLARE
            CURSOR CULPRITS IS
              SELECT
                -PATHS.SINGLE_OPERATION_ID "COORD_OP_ID"
              FROM
                MDSYS.SDO_COORD_OP_PATHS PATHS
              WHERE
                PATHS.CONCAT_OPERATION_ID = -:new.COORD_OP_ID
              MINUS
              SELECT
                COORD_OP_ID
              FROM
                MDSYS.SDO_AVAILABLE_OPS;
            CULPRIT CULPRITS%ROWTYPE;
          BEGIN
            FOR CULPRIT IN CULPRITS LOOP
              dbms_output.put_line('Elementary operation ' || (-CULPRIT.COORD_OP_ID) || ' is not reversible.');
            END LOOP;
          END FIND_CULPRITS;

          MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Concatenated operation ' || -:new.COORD_OP_ID || ' is not reversible.'));
        END IF;
      END IF;
    END IF;
  END IF;

  SELECT IS_IMPLEMENTED INTO c FROM MDSYS.SDO_AVAILABLE_OPS WHERE COORD_OP_ID = :new.COORD_OP_ID;
  IF(c = 0) THEN
    MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.COORD_OP_ID || ' is not implemented.'));
  END IF;
END;
/
commit;
declare
  stm VARCHAR2(10000);
  rec_count NUMBER;
begin


  select count(*) into rec_count
  from sys.con$ c, sys.all_users u, sys.cdef$ cd, sys.obj$ o
  where c.name = 'PREFERRED_OPS_USE_PRIM' and
        c.owner# = u.user_id and
        u.username = 'MDSYS' and
        c.con# = cd.con# and
        cd.obj# = o.obj# and
        bitand(o.flags, 128) = 0;
  if(rec_count = 0) then
    stm :=
      'ALTER TABLE MDSYS.SDO_PREFERRED_OPS_USER ADD (
        CONSTRAINT PREFERRED_OPS_USE_PRIM PRIMARY KEY(USE_CASE, SOURCE_SRID, TARGET_SRID) USING INDEX)';
    execute immediate stm;
  end if;
end;
/
commit;
CREATE OR REPLACE TRIGGER
  MDSYS.SDO_PREFERRED_OPS_USER_TRIGGER
BEFORE
  INSERT OR
  UPDATE
ON
  MDSYS.SDO_PREFERRED_OPS_USER
FOR EACH ROW
DECLARE
  c NUMBER;
BEGIN

  MDSYS.sdo_cs.sdo_cs_context_invalidate;

  SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_OPS WHERE COORD_OP_ID = :new.COORD_OP_ID;
  IF(c < 1) THEN
    IF(:new.COORD_OP_ID > 0) THEN
      MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.COORD_OP_ID || ' does not exist.'));
    ELSE
      SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_OPS WHERE COORD_OP_ID = -:new.COORD_OP_ID;
      IF(c < 1) THEN
        MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.COORD_OP_ID || ' does not exist, neither does its forward version ' || -:new.COORD_OP_ID || '.'));
      ELSE
        SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_NON_ELEM_OPS WHERE COORD_OP_ID = -:new.COORD_OP_ID;
        IF(c < 1) THEN
          MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Elementary operation ' || -:new.COORD_OP_ID || ' is not reversible.'));
        ELSE
          dbms_output.put_line('Concatenated operation ' || -:new.COORD_OP_ID || ' is not reversible, because of its following elementary component(s):');

          <<FIND_CULPRITS>>
          DECLARE
            CURSOR CULPRITS IS
              SELECT
                -PATHS.SINGLE_OPERATION_ID "COORD_OP_ID"
              FROM
                MDSYS.SDO_COORD_OP_PATHS PATHS
              WHERE
                PATHS.CONCAT_OPERATION_ID = -:new.COORD_OP_ID
              MINUS
              SELECT
                COORD_OP_ID
              FROM
                MDSYS.SDO_AVAILABLE_OPS;
            CULPRIT CULPRITS%ROWTYPE;
          BEGIN
            FOR CULPRIT IN CULPRITS LOOP
              dbms_output.put_line('Elementary operation ' || (-CULPRIT.COORD_OP_ID) || ' is not reversible.');
            END LOOP;
          END FIND_CULPRITS;

          MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Concatenated operation ' || -:new.COORD_OP_ID || ' is not reversible'));
        END IF;
      END IF;
    END IF;
  END IF;

  SELECT IS_IMPLEMENTED INTO c FROM MDSYS.SDO_AVAILABLE_OPS WHERE COORD_OP_ID = :new.COORD_OP_ID;
  IF(c = 0) THEN
    MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.COORD_OP_ID || ' is not implemented.'));
  END IF;
END;
/
commit;
declare
  stm VARCHAR2(10000);
  rec_count NUMBER;
begin


  select count(*) into rec_count
  from sys.con$ c, sys.all_users u, sys.cdef$ cd, sys.obj$ o
  where c.name = 'COORD_OP_PATH_FOREIGN_SOURCE' and
        c.owner# = u.user_id and
        u.username = 'MDSYS' and
        c.con# = cd.con# and
        cd.obj# = o.obj# and
        bitand(o.flags, 128) = 0;
  if(rec_count = 0) then
    stm :=
      'ALTER TABLE MDSYS.SDO_COORD_OP_PATHS ADD (
        CONSTRAINT COORD_OP_PATH_FOREIGN_SOURCE FOREIGN KEY(SINGLE_OP_SOURCE_ID) REFERENCES MDSYS.SDO_COORD_REF_SYS(SRID),
        CONSTRAINT COORD_OP_PATH_FOREIGN_TARGET FOREIGN KEY(SINGLE_OP_TARGET_ID) REFERENCES MDSYS.SDO_COORD_REF_SYS(SRID))';
    execute immediate stm;
  end if;
end;
/
commit;
CREATE OR REPLACE TRIGGER
  MDSYS.SDO_COORD_OP_PATHS_TRIGGER
BEFORE
  INSERT OR
  UPDATE
ON
  MDSYS.SDO_COORD_OP_PATHS
FOR EACH ROW
DECLARE
  c NUMBER;
  is_impl_single NUMBER;
  is_impl_concat NUMBER;
BEGIN

  MDSYS.sdo_cs.sdo_cs_context_invalidate;

  SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_NON_ELEM_OPS WHERE COORD_OP_ID = :new.CONCAT_OPERATION_ID;
  IF(c < 1) THEN
    SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_ELEM_OPS WHERE COORD_OP_ID = :new.CONCAT_OPERATION_ID;
    IF(c < 1) THEN
      IF(:new.CONCAT_OPERATION_ID > 0) THEN
        MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.CONCAT_OPERATION_ID || ' does not exist.'));
      ELSE
        SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_NON_ELEM_OPS WHERE COORD_OP_ID = -:new.CONCAT_OPERATION_ID;
        IF(c < 1) THEN
          MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.CONCAT_OPERATION_ID || ' does not exist, neither does its forward version ' || -:new.CONCAT_OPERATION_ID || '.'));
        ELSE
          dbms_output.put_line('Concatenated operation ' || -:new.CONCAT_OPERATION_ID || ' is not reversible, because of its following elementary component(s):');

          <<FIND_CULPRITS>>
          DECLARE
            CURSOR CULPRITS IS
              SELECT
                -PATHS.SINGLE_OPERATION_ID "COORD_OP_ID"
              FROM
                MDSYS.SDO_COORD_OP_PATHS PATHS
              WHERE
                PATHS.CONCAT_OPERATION_ID = -:new.CONCAT_OPERATION_ID
              MINUS
              SELECT
                COORD_OP_ID
              FROM
                MDSYS.SDO_AVAILABLE_OPS;
            CULPRIT CULPRITS%ROWTYPE;
          BEGIN
            FOR CULPRIT IN CULPRITS LOOP
              dbms_output.put_line('Elementary operation ' || (-CULPRIT.COORD_OP_ID) || ' is not reversible.');
            END LOOP;
          END FIND_CULPRITS;

          MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Concatenated operation ' || -:new.CONCAT_OPERATION_ID || ' is not reversible'));
        END IF;
      END IF;
    ELSE
      MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.CONCAT_OPERATION_ID || ' is an elementary operation, not a concatenated one.'));
    END IF;
  END IF;

  SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_ELEM_OPS WHERE COORD_OP_ID = :new.SINGLE_OPERATION_ID;
  IF(c < 1) THEN
    SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_NON_ELEM_OPS WHERE COORD_OP_ID = :new.SINGLE_OPERATION_ID;
    IF(c < 1) THEN
      IF(:new.SINGLE_OPERATION_ID > 0) THEN
        MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.SINGLE_OPERATION_ID || ' does not exist.'));
      ELSE
        SELECT COUNT(COORD_OP_ID) INTO c FROM MDSYS.SDO_AVAILABLE_ELEM_OPS WHERE COORD_OP_ID = -:new.SINGLE_OPERATION_ID;
        IF(c < 1) THEN
          MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.SINGLE_OPERATION_ID || ' does not exist, neither does its forward version ' || -:new.SINGLE_OPERATION_ID || '.'));
        ELSE
          MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || -:new.SINGLE_OPERATION_ID || ' is not reversible.'));
        END IF;
      END IF;
    ELSE
      MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, ('Operation ' || :new.SINGLE_OPERATION_ID || ' is a concatenated operation, not an elementary one.'));
    END IF;
  END IF;

  SELECT IS_IMPLEMENTED INTO is_impl_single FROM MDSYS.SDO_AVAILABLE_ELEM_OPS WHERE COORD_OP_ID = :new.SINGLE_OPERATION_ID;
  IF(is_impl_single = 0) THEN
    SELECT IS_IMPLEMENTED INTO is_impl_concat FROM MDSYS.SDO_AVAILABLE_NON_ELEM_OPS WHERE COORD_OP_ID = :new.CONCAT_OPERATION_ID;
    IF(is_impl_concat = 1) THEN
      MDSYS.MDERR.RAISE_MD_ERROR('MD', 'SDO', -13199, (
        'Single operation ' || :new.SINGLE_OPERATION_ID ||
        ' is not implemented. Then concatenated operation ' || :new.CONCAT_OPERATION_ID ||
        ' cannot be, neither.'));
    END IF;
  END IF;
END;
/
commit;
declare
  stm VARCHAR2(10000);
  rec_count NUMBER;
begin


  select count(*) into rec_count
  from sys.con$ c, sys.all_users u, sys.cdef$ cd, sys.obj$ o
  where c.name = 'COORD_OP_PARA_PRIM' and
        c.owner# = u.user_id and
        u.username = 'MDSYS' and
        c.con# = cd.con# and
        cd.obj# = o.obj# and
        bitand(o.flags, 128) = 0;
  if(rec_count = 0) then
    stm :=
      'ALTER TABLE MDSYS.SDO_COORD_OP_PARAMS ADD (
        CONSTRAINT COORD_OP_PARA_PRIM PRIMARY KEY(PARAMETER_ID) USING INDEX)';
    execute immediate stm;
  end if;
end;
/
commit;
declare
  stm VARCHAR2(10000);
  rec_count NUMBER;
begin


  select count(*) into rec_count
  from sys.con$ c, sys.all_users u, sys.cdef$ cd, sys.obj$ o
  where c.name = 'COORD_OP_PARA_USE_FOREIGN_METH' and
        c.owner# = u.user_id and
        u.username = 'MDSYS' and
        c.con# = cd.con# and
        cd.obj# = o.obj# and
        bitand(o.flags, 128) = 0;
  if(rec_count = 0) then
    stm :=
      'ALTER TABLE MDSYS.SDO_COORD_OP_PARAM_USE ADD (
        CONSTRAINT COORD_OP_PARA_USE_PRIM PRIMARY KEY(COORD_OP_METHOD_ID, SORT_ORDER) USING INDEX,
        CONSTRAINT COORD_OP_PARA_USE_FOREIGN_METH FOREIGN KEY(COORD_OP_METHOD_ID) REFERENCES MDSYS.SDO_COORD_OP_METHODS(COORD_OP_METHOD_ID),
        CONSTRAINT COORD_OP_PARA_USE_FOREIGN_PARA FOREIGN KEY(PARAMETER_ID) REFERENCES MDSYS.SDO_COORD_OP_PARAMS(PARAMETER_ID))';
    execute immediate stm;
  end if;
end;
/
commit;
declare
  stm VARCHAR2(10000);
  rec_count NUMBER;
begin


  select count(*) into rec_count
  from sys.con$ c, sys.all_users u, sys.cdef$ cd, sys.obj$ o
  where c.name = 'COORD_OP_PARA_VAL_FOREIGN_OP' and
        c.owner# = u.user_id and
        u.username = 'MDSYS' and
        c.con# = cd.con# and
        cd.obj# = o.obj# and
        bitand(o.flags, 128) = 0;
  if(rec_count = 0) then
    stm :=
      'ALTER TABLE MDSYS.SDO_COORD_OP_PARAM_VALS ADD (
        CONSTRAINT COORD_OP_PARA_VAL_PRIM PRIMARY KEY(COORD_OP_ID, PARAMETER_ID) USING INDEX,
        CONSTRAINT COORD_OP_PARA_VAL_FOREIGN_OP FOREIGN KEY(COORD_OP_ID) REFERENCES MDSYS.SDO_COORD_OPS(COORD_OP_ID),
        CONSTRAINT COORD_OP_PARA_VAL_FOREIGN_METH FOREIGN KEY(COORD_OP_METHOD_ID) REFERENCES MDSYS.SDO_COORD_OP_METHODS(COORD_OP_METHOD_ID),
        CONSTRAINT COORD_OP_PARA_VAL_FOREIGN_PARA FOREIGN KEY(PARAMETER_ID) REFERENCES MDSYS.SDO_COORD_OP_PARAMS(PARAMETER_ID),
        CONSTRAINT COORD_OP_PARA_VAL_FOREIGN_UOM FOREIGN KEY(UOM_ID) REFERENCES MDSYS.SDO_UNITS_OF_MEASURE(UOM_ID))';
    execute immediate stm;
  end if;
end;
/
commit;
@@sdoepsgl3.plb
@?/rdbms/admin/sqlsessend.sql

OHA YOOOO