MINI MINI MANI MO
@@?/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