MINI MINI MANI MO
Rem
Rem $Header: sdo/admin/sdocswmeta.sql /main/11 2017/07/05 11:00:12 rjanders Exp $
Rem
Rem sdocswmeta.sql
Rem
Rem Copyright (c) 2014, 2017, Oracle and/or its affiliates.
Rem All rights reserved.
Rem
Rem NAME
Rem sdocswmeta.sql - <one-line expansion of the name>
Rem
Rem DESCRIPTION
Rem Metadata for CSW202+ service.
Rem
Rem NOTES
Rem Clean up MDSYS.CSW_SERVICE_INFO metadata table
Rem when the CSW 202 user is dropped (See prvtgmd.sql)
Rem
Rem
Rem BEGIN SQL_FILE_METADATA
Rem SQL_SOURCE_FILE: sdo/admin/sdocswmeta.sql
Rem SQL_SHIPPED_FILE: md/admin/sdocswmeta.sql
Rem SQL_PHASE: SDOCSWMETA
Rem SQL_STARTUP_MODE: NORMAL
Rem SQL_IGNORABLE_ERRORS: NONE
Rem SQL_CALLING_FILE: sdo/admin/sdowfscs.sql
Rem END SQL_FILE_METADATA
Rem
Rem MODIFIED (MM/DD/YY)
Rem rjanders 06/30/17 - Add SYS/MDSYS prefixes
Rem rjanders 05/10/17 - #26037683: Raise 'when other' exceptions
Rem rjanders 03/23/17 - #25437999: Remove 'when others then NULL'
Rem handlers
Rem sravada 01/11/17 - bug 25370681
Rem bkazar 02/17/16 - Add CSW 202 metadata for drop user trigger (See Notes)
Rem bkazar 10/25/15 - Issue: grant ... on USER_SDO_CSW_SERVICE_INFO to
Rem public
Rem bkazar 10/18/15 - Add unique contraint for SDO_OWNER, CSW_TABLE_NAME in
Rem MDSYS.CSW_SERVICE_INFO table
Rem bkazar 10/13/15 - Add primary key constraint to base table
Rem bkazar 10/13/15 - Add instead of insert trigger for views
Rem bkazar 10/12/15 - Make views available
Rem czechar 08/14/15 - add SQL file metadata
Rem bkazar 06/23/15 - Renamings: Table and view names are modified.
Rem Removed CSW in col names of MDSYS.SDO_XSD_TABLE
Rem (old name MDSYS.CSW_XSD_TABLE$) and moved to sdoxsdmeta.sql.
Rem bkazar 12/24/14 - Modified
Rem bkazar 12/04/14 - Created
Rem
@@?/rdbms/admin/sqlsessstart.sql
--------------------------------------------------------------------------------
-- Description:
-- CSW_XSD_ID is 1,2,3,... for parent XSD and 101,102,... for children XSDs of parent XSD ID 1
-- and 201,202,... for children XSDs of parent XSD ID 2
-- and 301,302,... for children XSDs of parent XSD ID 3,
-- and 1001,1002,... for children XSDs of parent XSD ID 10, etc.
-- In other words we can have at most 99 children XSDs for a parent XSD.
-- CSW_XSD_DOC is the LOB formatted XSD.
-- CSW_XSD_NAME is either DCMI, ISO191153 or INSPIRE: ie, the type of parent XSD.
-- CSW_XSD_URL the url that will be used to register the parent or child XSD.
-- CSW_VERSION the version of CSW ie, 202+ inclusive.
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Description:
-- There will be a view of MDSYS.CSW_SERVICE_INFO table for each CSW 202+ instance.
--------------------------------------------------------------------------------
declare
stmt VARCHAR2(10000);
rec_count NUMBER;
begin
select count(*) into rec_count
from SYS.ALL_TABLES
where owner = 'MDSYS' and
table_name = 'CSW_SERVICE_INFO';
if(rec_count = 0) then
begin
stmt :=
'CREATE TABLE MDSYS.CSW_SERVICE_INFO
(SDO_OWNER VARCHAR2(80),
CSW_VERSION VARCHAR2(20),
CSW_XSD_ID NUMBER,
CSW_TABLE_NAME VARCHAR2(80),
CONSTRAINT unique_xsd
PRIMARY KEY (SDO_OWNER, CSW_XSD_ID),
CONSTRAINT unique_table
UNIQUE (SDO_OWNER, CSW_TABLE_NAME)
)';
execute immediate stmt;
exception
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdocswmeta.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); RAISE;
end;
end if;
end;
/
--------------------------------------------------------------------------------
-- Description:
-- Create ALL view of MDSYS.CSW_SERVICE_INFO table.
--------------------------------------------------------------------------------
CREATE OR REPLACE VIEW MDSYS.ALL_SDO_CSW_SERVICE_INFO AS
SELECT b.SDO_OWNER OWNER,
b.CSW_VERSION CSW_VERSION,
b.CSW_XSD_ID XSD_ID,
b.CSW_TABLE_NAME TABLE_NAME
FROM MDSYS.CSW_SERVICE_INFO b,
SYS.all_objects a
WHERE b.CSW_TABLE_NAME = a.object_name
AND b.SDO_OWNER = a.owner
AND a.object_type in ('TABLE', 'SYNONYM', 'VIEW');
--------------------------------------------------------------------------------
-- Description:
-- Create USER view of MDSYS.CSW_SERVICE_INFO table.
--------------------------------------------------------------------------------
CREATE OR REPLACE VIEW MDSYS.USER_SDO_CSW_SERVICE_INFO AS
SELECT CSW_VERSION, XSD_ID, TABLE_NAME
FROM MDSYS.ALL_SDO_CSW_SERVICE_INFO
WHERE OWNER = SYS_CONTEXT('userenv', 'CURRENT_USER');
-- ----------------------------------------------------------------
-- DML Triggers regarding the Metadata Table and Its Views
-- ----------------------------------------------------------------
CREATE OR REPLACE TRIGGER MDSYS.SDO_CSW_TRIGGER_INS1
INSTEAD OF INSERT ON MDSYS.USER_SDO_CSW_SERVICE_INFO
FOR EACH ROW
DECLARE
owner VARCHAR2(130);
--valid VARCHAR2(32);
BEGIN
owner := user;
INSERT INTO MDSYS.CSW_SERVICE_INFO VALUES(owner, :new.CSW_VERSION, :new.XSD_ID, :new.TABLE_NAME);
END;
/
show errors;
CREATE OR REPLACE TRIGGER MDSYS.SDO_CSW_TRIGGER_DEL1
INSTEAD OF DELETE ON MDSYS.USER_SDO_CSW_SERVICE_INFO
FOR EACH ROW
DECLARE
owner VARCHAR2(130);
--valid VARCHAR2(32);
BEGIN
owner := user;
DELETE FROM MDSYS.CSW_SERVICE_INFO
WHERE SDO_OWNER = owner AND
CSW_XSD_ID = :old.XSD_ID;
END;
/
show errors;
CREATE OR REPLACE TRIGGER MDSYS.SDO_CSW_TRIGGER_UPD1
INSTEAD OF UPDATE ON MDSYS.USER_SDO_CSW_SERVICE_INFO
FOR EACH ROW
DECLARE
owner VARCHAR2(130);
--valid VARCHAR2(32);
BEGIN
owner := user;
-- First delete the old entry
DELETE FROM MDSYS.CSW_SERVICE_INFO
WHERE SDO_OWNER = owner AND
CSW_XSD_ID = :old.XSD_ID;
-- insert the new entry
INSERT INTO MDSYS.CSW_SERVICE_INFO VALUES(owner, :new.CSW_VERSION, :new.XSD_ID, :new.TABLE_NAME);
END;
/
show errors;
-- ----------------------------------------------------------------
-- Grant privileges
-- ----------------------------------------------------------------
grant read,insert, delete, update on MDSYS.USER_SDO_CSW_SERVICE_INFO to public;
grant read on MDSYS.ALL_SDO_CSW_SERVICE_INFO to public;
create or replace public synonym USER_SDO_CSW_SERVICE_INFO
for MDSYS.USER_SDO_CSW_SERVICE_INFO;
create or replace public synonym ALL_SDO_CSW_SERVICE_INFO for
MDSYS.ALL_SDO_CSW_SERVICE_INFO;
commit;
--set serveroutput off;
@?/rdbms/admin/sqlsessend.sql
OHA YOOOO