MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/md/admin/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/md/admin/sdocswadm.sql

Rem
Rem $Header: sdo/admin/sdocswadm.sql /main/5 2017/07/05 11:00:13 rjanders Exp $
Rem
Rem sdocswadm.sql
Rem
Rem Copyright (c) 2014, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      sdocswadm.sql - <one-line expansion of the name>
Rem
Rem    DESCRIPTION
Rem      MDSYS Protected Operations.
Rem
Rem    NOTES
Rem      See also mdprivs.sql.(12/30/2014)
Rem
Rem    BEGIN SQL_FILE_METADATA 
Rem    SQL_SOURCE_FILE: sdo/admin/sdocswadm.sql 
Rem    SQL_SHIPPED_FILE: md/admin/sdocswadm.sql 
Rem    SQL_PHASE: SDOCSWADM
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    czechar     08/14/15 - add SQL file metadata
Rem    bkazar      07/06/15 - CSW202 Error Message Codes
Rem    bkazar      06/16/15 - Renamings
Rem    bkazar      12/29/14 - Add MDSYS.SDO_CSWADM package
Rem    bkazar      12/04/14 - Created
Rem

@@?/rdbms/admin/sqlsessstart.sql



CREATE OR REPLACE PACKAGE MDSYS.SDO_CSWADM AS

--------------------------------------------------------------------------------
-- Description:
-- Registers an XSD.
--------------------------------------------------------------------------------

procedure register_xsd
(
    xsd_url      IN VARCHAR2,
    xsd_doc_lob  IN CLOB
);


--------------------------------------------------------------------------------
-- Description:
-- Registers the XSDS corresponding to the xsd_type where each XSD is fetched 
-- from MDSYS.SDO_XSD_TABLE (old name MDSYS.CSW_XSD_TABLE$).
-- xsd_type could be DCMI, ISO19139 or INSPIRE.
--------------------------------------------------------------------------------

procedure register_xsds
(
    --record_type_name      IN VARCHAR2,
    --record_type_namespace IN VARCHAR2,
    xsd_type              IN VARCHAR2

);


--------------------------------------------------------------------------------
-- Cleanup MDSYS.SDO_XSD_TABLE (old name MDSYS.CSW_XSD_TABLE$) for a specific 
-- XSD type i.e., DCMI, ISO19139 or INSPIRE. 
-- owner is MDSYS by default.
--------------------------------------------------------------------------------

procedure delete_from_SDO_XSD_TABLE
(
    xsd_type IN VARCHAR2,
    owner    IN VARCHAR2 DEFAULT 'MDSYS'
);


--------------------------------------------------------------------------------
-- Delete XSD schema corresponding to the xsd_url if it exists. 
--------------------------------------------------------------------------------

procedure delete_schema
(
    xsd_url IN VARCHAR2

);
END;
/
show errors;




CREATE OR REPLACE PACKAGE BODY MDSYS.SDO_CSWADM AS

--------------------------------------------------------------------------------
-- Description:
-- Registers an XSD
--------------------------------------------------------------------------------

procedure register_xsd
(
    xsd_url      IN VARCHAR2,
    xsd_doc_lob  IN CLOB
)
AS

    m            NUMBER := 0;
    stmt         VARCHAR2(1000);

BEGIN
    
    --dbms_output.put_line('Checking DBA_XML_SCHEMAS table...');
    stmt := 
        'select count(*) from SYS.DBA_XML_SCHEMAS where owner=''MDSYS'' AND SCHEMA_URL = :1';
    execute immediate stmt into m using xsd_url;
    --dbms_output.put_line('Is XSD Schema ' || xsd_url || ' registered?: ' || m);
        
    IF (m = 0) THEN 
        --dbms_output.put_line('Registering XSD Schema ' || xsd_url);
        DBMS_XMLSCHEMA.registerSchema(
            SCHEMAURL  => xsd_url,
            SCHEMADOC  => xsd_doc_lob,
            LOCAL      => TRUE,
            GENTYPES   => FALSE,
            GENBEAN    => FALSE,
            -- This parameter does not exist when registering CLOB: GENTABLES  => FALSE,
            FORCE      => TRUE,
            -- This parameter does not exist when registering CLOB: CSID       => nls_charset_id('AL32UTF8'),
            OWNER      => 'MDSYS', -- Added to use full signature with CLOB register
            OPTIONS    => DBMS_XMLSCHEMA.REGISTER_BINARYXML);
        --dbms_output.put_line('Registered XSD Schema ' || xsd_url);

    END IF;
    
END;


--------------------------------------------------------------------------------
-- Description:
-- Registers the XSDS corresponding to the xsd_type where each XSD is fetched 
-- from MDSYS.SDO_XSD_TABLE (old name MDSYS.CSW_XSD_TABLE$).
-- xsd_type could be DCMI, ISO19139 or INSPIRE.
--------------------------------------------------------------------------------

procedure register_xsds
(
    --record_type_name      IN VARCHAR2,
    --record_type_namespace IN VARCHAR2,
    xsd_type              IN VARCHAR2

)
AS

    dmlStr    VARCHAR2(1000);
    type      cursor_type is REF CURSOR;
    query_crs cursor_type;

BEGIN

    BEGIN
        dmlStr := 'select XSD_ID, XSD_DOC, XSD_NAME, XSD_URL' || 
                  ' from MDSYS.SDO_XSD_TABLE where XSD_NAME = :1';
        OPEN query_crs FOR dmlStr USING xsd_type;
        LOOP
        DECLARE 
           XSD_ID     NUMBER;
           XSD_DOC    CLOB;
           XSD_NAME   VARCHAR2(80);
           XSD_URL    VARCHAR2(1000);
        BEGIN
           FETCH query_crs INTO XSD_ID, XSD_DOC, XSD_NAME, XSD_URL;
           EXIT WHEN query_crs%NOTFOUND ;
               BEGIN
                   --dbms_output.put_line('Registering: ' || xsd_url);
                   register_xsd(XSD_URL, XSD_DOC);
                   --EXCEPTION WHEN OTHERS THEN NULL;
               END;
        END;
        END LOOP;
        CLOSE query_crs;
        --EXCEPTION WHEN OTHERS THEN NULL;
    END;

    -- COMMIT; 
END;


--------------------------------------------------------------------------------
-- Cleanup MDSYS.SDO_XSD_TABLE (old name MDSYS.CSW_XSD_TABLE$) for a specific 
-- XSD type i.e., DCMI, ISO19139 or INSPIRE. 
-- owner is MDSYS by default.
--------------------------------------------------------------------------------

procedure delete_from_SDO_XSD_TABLE
(
    xsd_type IN VARCHAR2,
    owner    IN VARCHAR2 DEFAULT 'MDSYS'
)
AS

BEGIN
   
   IF (xsd_type NOT IN ('DCMI', 'ISO19139', 'INSPIRE')) THEN
       MDSYS.MDERR.raise_md_error(
             'MD', 'SDO', -55161, 'wrong XSD Type parameter.');
   END IF;
   
   DELETE FROM MDSYS.SDO_XSD_TABLE WHERE XSD_NAME = xsd_type;
   COMMIT;

END;


--------------------------------------------------------------------------------
-- Delete XSD schema corresponding to the xsd_url if it exists. 
--------------------------------------------------------------------------------

procedure delete_schema
(
    xsd_url IN VARCHAR2

)
AS

   stmt VARCHAR2(1000);
   m    NUMBER := 0;

BEGIN

   --dbms_output.put_line('Checking DBA_XML_SCHEMAS table...'); 
   stmt :=
        'select count(*) from SYS.DBA_XML_SCHEMAS where owner=''MDSYS'' AND SCHEMA_URL = :1';
    execute immediate stmt into m using xsd_url;
    --dbms_output.put_line('Is XSD Schema ' || xsd_url || ' registered?: ' || m);
        
    IF (m > 0) THEN
        --dbms_output.put_line('Deleting registered XSD schema with URL:' || xsd_url);
        DBMS_XMLSCHEMA.deleteSchema(xsd_url, DBMS_XMLSCHEMA.DELETE_CASCADE_FORCE);
        --dbms_output.put_line('Deleted registered XSD schema with URL:' || xsd_url);
    END IF;
END;


END; -- End of SDO_CSWADM package
/
show  errors;
grant execute on MDSYS.SDO_CSWADM TO PUBLIC;

@?/rdbms/admin/sqlsessend.sql

OHA YOOOO