MINI MINI MANI MO

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

Rem
Rem $Header: sdo/admin/sdordfctx.sql /main/27 2017/05/26 16:34:19 rjanders Exp $
Rem
Rem sdordftx.sql
Rem
Rem Copyright (c) 2009, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      sdordfctx.sql - <one-line expansion of the name>
Rem
Rem    DESCRIPTION
Rem      <short description of component this file declares/defines>
Rem
Rem    NOTES
Rem      <other useful comments, qualifications, etc.>
Rem
Rem    BEGIN SQL_FILE_METADATA
Rem    SQL_SOURCE_FILE: sdo/admin/sdordfctx.sql
Rem    SQL_SHIPPED_FILE: md/admin/sdordfctx.sql
Rem    SQL_PHASE: SDORDFCTX
Rem    SQL_STARTUP_MODE: NORMAL
Rem    SQL_IGNORABLE_ERRORS: NONE
Rem    SQL_CALLING_FILE: sdo/admin/semrelod.sql
Rem    END SQL_FILE_METADATA
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    rjanders    05/10/17 - #26037683: Raise 'when other' exceptions
Rem    rjanders    03/23/17 - #25437999: Remove 'when others then NULL'
Rem                           handlers
Rem    rjanders    03/09/17 - Add missing SQL_FILE_METADATA information
Rem    sravada     01/11/17 - bug 25370681
Rem    sdas        12/12/13 - bug 17415371: no UNDER to PUBLIC
Rem    rjanders    03/15/13 - #16473696: Start/End _ORACLE_SCRIPT
Rem                           initialization
Rem    sdas        12/20/12 - XbranchMerge sdas_lrg-8624014 from
Rem                           st_sdo_12.1.0.1
Rem    spsundar    12/12/12 - add grant under extractor type to public
Rem    matperry    06/22/12 - make repeatable to be more upgrade friendly
Rem    sdas        05/20/11 - tracing using ODCIenv
Rem    sdas        05/12/11 - extend the batchExtractRdf interface
Rem    spsundar    05/09/11 - rename sem_contains_score to sem_contains_count
Rem    sdas        04/29/11 - mix of batch and regular policies
Rem    sdas        04/25/11 - batch rebuild with multiple base-policies
Rem    sdas        04/23/11 - continue batch interface: use two
Rem                           index_merge/index_load calls for GLOBAL index
Rem    sdas        04/19/11 - batch interface implementation
Rem    spsundar    04/11/11 - add new methods to interface for rdfctx_extractor
Rem    sdas        02/01/11 - SDO version check should look for 11 or higher
Rem    sdas        12/30/10 - pass mapping table names to build_index_partition
Rem    spsundar    12/07/10 - add support for local semantic index
Rem    sdas        08/11/10 - XbranchMerge sdas_bug-9937565 from st_sdo_11.2.0
Rem    sdas        07/14/10 - allow loadMethod spec in prllidx_create type spec
Rem    matperry    06/30/10 - move creation of object types for parallel index
Rem                           form prvtrdfctx to sdordfctx
Rem    ayalaman    06/09/09 - stylesheet for web-service information extractor
Rem    matperry    05/26/09 - remove WHENEVER SQLERROR EXIT
Rem    ayalaman    05/20/09 - add methods set_extractor_param to rdfctx
Rem    ayalaman    05/07/09 - gate nlp integration
Rem    ayalaman    04/14/09 - handling 3rd party license key
Rem    ayalaman    03/19/09 - rename select operator 
Rem    ayalaman    03/10/09 - ctx_entity extractor
Rem    ayalaman    02/27/09 - user ontologies and rule bases
Rem    ayalaman    02/09/09 - domain index implementation
Rem    ayalaman    01/13/09 - RDF text search
Rem    ayalaman    01/13/09 - Created
Rem

Rem ********************************************************************
Rem #16473696: Indicate Oracle-Supplied object
@@?/rdbms/admin/sqlsessstart.sql
Rem ********************************************************************

--WHENEVER SQLERROR EXIT;

----------------------------------------------------------------------------
--===========        PLEASE READ BEFORE MODIFYING TYPES        ===========--
----------------------------------------------------------------------------
--                                                                        --
-- The idea is to make this script repeatable so that it is               --
-- upgrade friendly, so follow these steps:                               --
--                                                                        --
-- 1) CREATE OR REPLACE TYPE with the original type definition            --
--    from the first time that it is added. Then do not change this.      --
-- 2) To drop a method/attribute                                          --
--    a) drop the method/attribute in this file                           --
-- 3) To add a method/attribute                                           --
--    a) add the method/attribute in this file                            --
--    b) drop method/attribute in semeXXX.sql file used during downgrade  --
--       e.g. for release 12.1, modify seme112.sql                        --
--                                                                        --
-- Note that you have to wrap each modification in a PL/SQL block to      --
-- catch errors (e.g. drop a method that's not there) so that the         --
-- install does not fail.                                                 --
----------------------------------------------------------------------------


declare
  rc NUMBER;
  version VARCHAR2(100);
  ver_num NUMBER;
  table_not_found exception;
  pragma exception_init(table_not_found, -00942);
  already_revoked exception;
  pragma exception_init(already_revoked, -01927);
  cannot_revoke exception;
  pragma exception_init(cannot_revoke, -02344);
begin
  select count(*) into rc from SYS.all_objects where owner = 'MDSYS' and
    object_name = 'SDO_RDF';
  version := dbms_registry.version('SDO');
  ver_num := to_number(substr(version,1,instr(version,'.')-1));
  if (ver_num < 11 or rc = 0) then
     raise_application_error(-20000, 'RDF Component not installed:'||
        'RDF Component for 11.1 or above must be installed.');
  end if;

  begin
    execute immediate 'revoke UNDER on mdsys.rdfctx_extractor from PUBLIC';
    exception
      when cannot_revoke then NULL;
      when table_not_found then NULL;
      when already_revoked then NULL;
      when others then
        SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                               'EXCEPTION[sdordfctx.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); -- RAISE;
  end;

  begin
    execute immediate 'revoke UNDER on mdsys.rdfctx_ws_extractor from PUBLIC';
    exception
      when table_not_found then NULL;
      when already_revoked then NULL;
      when others then
        SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                               'EXCEPTION[sdordfctx.sql(' || $$PLSQL_LINE || ')2]: ' || SQLERRM); -- RAISE;
  end;
end;
/

declare
  role_conflict exception;
  pragma exception_init(role_conflict, -01921);
  insufficient_privileges exception;
  pragma exception_init(insufficient_privileges, -01031);
begin
  execute immediate
   'create role rdfctx_admin';
  exception
    when role_conflict then NULL;
    when insufficient_privileges then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                             'EXCEPTION[sdordfctx.sql(' || $$PLSQL_LINE || ')3]: ' || SQLERRM); -- RAISE;
end;
/ 

WHENEVER SQLERROR CONTINUE;

grant execute on DBMS_NETWORK_ACL_ADMIN to mdsys; 

DECLARE
  entity_exists exception;
  pragma exception_init(entity_exists, -46212);
  child_exists exception;
  pragma exception_init(child_exists, -31003);
BEGIN
  DBMS_NETWORK_ACL_ADMIN.create_acl (
    acl          => 'mdsys_rdfctx.xml', 
    description  => 'ACL for web service access from MDSYS',
    principal    => 'MDSYS',
    is_grant     => TRUE, 
    privilege    => 'connect',
    start_date   => SYSTIMESTAMP,
    end_date     => NULL);
  COMMIT;

  exception 
    when entity_exists then NULL;
    when child_exists then NULL;
    when others then 
      raise;  
END;
/

alter session set current_schema = MDSYS;

/*****************************************************************************/
/*** Text extractor for semantic searches                                  ***/
/*****************************************************************************/
declare
  dependent_objects exception;
  pragma exception_init(dependent_objects, -02303);
begin
  execute immediate
   'create or replace type rdfctx_extractor authid current_user as object (

      extr_type  VARCHAR2(32), 

      member procedure startDriver,

      member function getDescription return VARCHAR2, 

      -- RDF/XML,RDF/XML-ESC, etc
      member function rdfReturnType return VARCHAR2, 
      -- In some cases, the rdf/xml text has escape sequences for the
      -- XML tags which makes them invalid XML. Hence a generic CLOB type is 
      -- is used. 

      member function extractRdf(document CLOB, 
                                 docId    VARCHAR2) return CLOB,

      member procedure closeDriver

    ) not instantiable not final';
  exception
    when dependent_objects then NULL;
    when others then 
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create rdfctx_extractor: '||SQLERRM);
end;
/ 

show errors; 

-- drop any original or non-original methods that are no longer needed

-- add current set of non-original methods

-- add a new method to extractor type that returns the value for a specified attribute
-- including:
-- DBUSER: the DB user on the extractor side who is going to connect to the database
--         to read from the documents from the docTable and
--         write extracted info (in rdfReturnType format) to the extr_info_table
--
-- BATCH_SUPPORT: 'YES' or 'NO'
--
-- more to follow...
declare
  compile_errors exception;
  pragma exception_init(compile_errors, -22324);
begin
  execute immediate
   'alter type rdfctx_extractor 
      add member function getContext(attribute VARCHAR2) return VARCHAR2
      cascade';
  exception
    when compile_errors then NULL;
    when others then 
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: rdfctx_extractor (add getContext): '||SQLERRM);
end;
/

-- parameters (such as quality of extraction) will be passed 
declare
  compile_errors exception;
  pragma exception_init(compile_errors, -22324);
begin
  execute immediate
   'alter type rdfctx_extractor
      add member function extractRdf(document CLOB,
                                     docId    VARCHAR2,
                                     params   VARCHAR2,
                                     options  VARCHAR2 default NULL) return CLOB
      cascade';
  exception
    when compile_errors then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: rdfctx_extractor (add extractRdf): '||SQLERRM);
end;
/

-- for batch extraction, we pass
-- a cursor for reading the documents
-- a table_name for holding data extracted from the docs
-- params (such as quality of extraction) that will be passed on uninterpreted
declare
  compile_errors exception;
  pragma exception_init(compile_errors, -22324);
begin
  execute immediate
   'alter type rdfctx_extractor
      add member function batchExtractRdf(docCursor        SYS_REFCURSOR,
                                     extracted_info_table  VARCHAR2,
                                     params                VARCHAR2,
                                     partition_name        VARCHAR2 default NULL,
                                     docId                 VARCHAR2 default NULL,
                                     preferences           SYS.XMLType default NULL,
                                     options               VARCHAR2 default NULL) return CLOB
      cascade';
  exception
    when compile_errors then NULL;
    when others then 
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: rdfctx_extractor (add batchExtractRdf): '||SQLERRM);
end;
/

grant execute on rdfctx_extractor to public;
grant execute on rdfctx_extractor to public;

/*****************************************************************************/
/*** Text extractor that is implemented as a web service                   ***/
/*****************************************************************************/
declare
  dependent_objects exception;
  pragma exception_init(dependent_objects, -02303);
begin
  execute immediate
   'create or replace type rdfctx_ws_extractor under rdfctx_extractor (

      ws_end_point VARCHAR2(1024), 
      ws_soap_act  VARCHAR2(1024), 
      ws_envelope  CLOB,
      ws_xsltrans  sys.XMLType, 

      overriding member function getDescription return VARCHAR2, 

      overriding member function rdfReturnType return VARCHAR2, 

      -- sets the proxy server for the current instance -- 
      overriding member procedure startDriver,

      -- post the http request to the web service end-point and 
      -- returns the response -- 
      overriding member function extractRdf(document CLOB, 
                                            docId    VARCHAR2) return CLOB,

      -- closes the driver -- 
      overriding member procedure closeDriver

    ) not instantiable not final';
  exception
    when dependent_objects then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create rdfctx_ws_extractor: '||SQLERRM);
end;
/

show errors; 

grant execute on rdfctx_ws_extractor to public; 
grant execute on rdfctx_ws_extractor to public; 

/*****************************************************************************/
/*** SEM_RDFCTX : Package for configuring Semantic search on Text          ***/
/*****************************************************************************/
create or replace package sem_rdfctx authid current_user as

  procedure create_policy (
              policy_name        VARCHAR2, 
              extractor          mdsys.rdfctx_extractor, 
              preferences        sys.XMLType default null); 

  procedure create_policy (
              policy_name        VARCHAR2, 
              base_policy        VARCHAR2); 

  procedure create_policy (
              policy_name        VARCHAR2, 
              base_policy        VARCHAR2, 
              user_models        mdsys.rdf_models, 
              rulebases          mdsys.rdf_rulebases default null); 

  procedure create_policy (
              policy_name        VARCHAR2, 
              base_policy        VARCHAR2, 
              user_models        mdsys.rdf_models, 
              user_entailments   mdsys.rdf_models,
              rulebases          mdsys.rdf_rulebases default null);

  procedure drop_policy (
              policy_name        VARCHAR2); 

  procedure set_default_policy (
              index_name         VARCHAR2, 
              policy_name        VARCHAR2); 

  procedure add_dependent_policy (
              index_name           VARCHAR2,
              policy_name          VARCHAR2,
              partition_name       VARCHAR2 default NULL);

  function extract_rdfxml (
              doc                CLOB,
              ext_type           mdsys.rdfctx_extractor) return CLOB;

  procedure maintain_triples (
              index_name         VARCHAR2, 
              where_clause       VARCHAR2,
              rdfxml_content     sys.XMLType,
              policy_name        VARCHAR2 default NULL, 
              action             VARCHAR2 default 'ADD'); 

  procedure set_extractor_param (
              param_key         VARCHAR2, 
              param_value       VARCHAR2, 
              param_desc        VARCHAR2); 

end sem_rdfctx; 
/

show errors; 

create or replace public synonym sem_rdfctx for mdsys.sem_rdfctx; 

grant execute on sem_rdfctx to public; 

/*****************************************************************************/
/*** CALAIS Extractor : web service extractor                              ***/
/*****************************************************************************/
declare
  dependent_objects exception;
  pragma exception_init(dependent_objects, -02303);
begin
  execute immediate
   'create or replace type calais_extractor under rdfctx_ws_extractor (

      constructor function calais_extractor (
                                      extr_params   sys.XMLType default null)
        return self as result,

      constructor function calais_extractor (
                                      ws_end_point  VARCHAR2,
                                      ws_soap_act   VARCHAR2,
                                      extr_params   sys.XMLType default null)
        return self as result, 

      overriding member function extractRdf(document CLOB, 
                                            docId    VARCHAR2) return CLOB

    )';
  exception
    when dependent_objects then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create calais_extractor: '||SQLERRM);
end;
/

grant execute on calais_extractor to public; 

/*****************************************************************************/
/*** CTX_ENTITY_EXTRACTOR : Oracle Context extractor                       ***/ 
/*****************************************************************************/
-- original definition --
declare
  dependent_objects exception;
  pragma exception_init(dependent_objects, -02303);
begin
  execute immediate
   'create or replace type ctx_entity_extractor under rdfctx_extractor (

      epl_policy  VARCHAR2(30),
      xsl_trans   sys.XMLtype, 

      constructor function ctx_entity_extractor (
                     epl_policy  VARCHAR2, 
                     base_url    VARCHAR2 default null) return self as result, 

      constructor function ctx_entity_extractor (
                     epl_policy  VARCHAR2, 
                     xsl_trans   sys.xmltype) return self as result, 

      overriding member function getDescription return VARCHAR2,

      overriding member function rdfReturnType return VARCHAR2,

      overriding member function extractRdf(document CLOB,
                                            docId    VARCHAR2) return CLOB

    )';
  exception
    when dependent_objects then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
       'SEM_INSTALL: sdordfctx: create ctx_entity_extractor: '||SQLERRM);
end; 
/

-- drop any methods no longer needed

-- now add current set of non-original methods
-- new batch extraction function --
declare
  compile_errors exception;
  pragma exception_init(compile_errors, -22324);
begin
  execute immediate
   'alter type ctx_entity_extractor
    add overriding member function extractRdf(document CLOB,
                                              docId    VARCHAR2,
                                              params   VARCHAR2,
                                              options  VARCHAR2 default NULL) return CLOB
    cascade';

  exception
    when compile_errors then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: ctx_entity_extractor (add extractRdf): '||SQLERRM);
end;
/


grant execute on ctx_entity_extractor to public; 

/*****************************************************************************/
/*** GATE NLP Extractor : extractor using GATE NLP                         ***/
/*****************************************************************************/
declare
  dependent_objects exception;
  pragma exception_init(dependent_objects, -02303);
begin
  execute immediate
   'create or replace type gatenlp_extractor under mdsys.rdfctx_extractor (

      gate_host  VARCHAR2(100),
      gate_port  NUMBER,
      xsl_trans  sys.XMLtype, 

      constructor function gatenlp_extractor (base_url  VARCHAR2 default null)
                        return self as result,

      constructor function gatenlp_extractor (xsl_trans  sys.xmltype)
                        return self as result,

      overriding member function getDescription return VARCHAR2,

      overriding member function extractRdf (document CLOB,
                                             docId    VARCHAR2) return CLOB

    )';
  exception
    when dependent_objects then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create gatenlp_extractor: '||SQLERRM);
end;  
/

grant execute on gatenlp_extractor to public; 


/*****************************************************************************/
/*** Types for parallel index creation                                     ***/
/*****************************************************************************/
declare
  dependent_objects exception;
  pragma exception_init(dependent_objects, -02303);
begin
  execute immediate
   'create or replace type doublenumlist as table of sys.odcinumberlist';
  exception
    when dependent_objects then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create doublenumlist: '||SQLERRM);
end;
/

declare
  dependent_objects exception;
  pragma exception_init(dependent_objects, -02303);
begin
  execute immediate
   'create or replace type fn_extarr is varray(5) of mdsys.rdfctx_extractor';
  exception
    when dependent_objects then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create fn_extarr: '||SQLERRM);
end;
/

declare
  dependent_objects exception;
  pragma exception_init(dependent_objects, -02303);
begin
  execute immediate
   'create or replace type fn_xmlpref is varray(5) of sys.xmltype';
  exception
    when dependent_objects then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create fn_xmlpref: '||SQLERRM);
end;
/

/***  prllidx_create type  ***/

-- original definition --
begin
  execute immediate
   'create or replace type prllidx_create authid current_user as object (

      c1 number,

      static function index_merge( 
               idxschema IN varchar2, 
               idxname   IN varchar2, 
               moderr    IN sys.odcinumberlist, 
               c1        IN SYS_REFCURSOR) return sys.odcinumberlist
         parallel_enable (partition c1 by any),

      static function index_load(
            filedir   varchar2, 
            filterpl  varchar2, 
            basepol   sys.ODCIVarchar2List,
            ctxpref   fn_xmlpref, 
            extarr    fn_extarr,   
            modarr    sys.ODCINumberList, 
            polrids   sys.ODCIvarchar2List, 
            loadMethod varchar2,
            cur       SYS_REFCURSOR) return  doublenumlist
        parallel_enable (partition cur by any) pipelined
    )';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create prllidx_create: '||SQLERRM);
end;
/

-- modifications --
-- drop any original or non-original methods that are no longer used
begin
  execute immediate
   'alter type prllidx_create
      drop static function index_merge(
            idxschema IN varchar2, 
            idxname   IN varchar2, 
            moderr    IN sys.odcinumberlist, 
            c1        IN SYS_REFCURSOR) return sys.odcinumberlist
        parallel_enable (partition c1 by any)
       cascade';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: prllidx_create (drop index_merge): '||SQLERRM);
end;
/

begin
  execute immediate
   'alter type prllidx_create
      drop static function index_load(
            filedir   varchar2, 
            filterpl  varchar2, 
            basepol   sys.ODCIVarchar2List,
            ctxpref   fn_xmlpref, 
            extarr    fn_extarr,   
            modarr    sys.ODCINumberList, 
            polrids   sys.ODCIvarchar2List, 
            loadMethod varchar2,
            cur       SYS_REFCURSOR) return  doublenumlist
        parallel_enable (partition cur by any) pipelined
       cascade';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: prllidx_create (drop index_load): '||SQLERRM);
end;
/

-- add current set of non-original methods
begin
  execute immediate
   'alter type prllidx_create
      add static function index_merge(
            idxschema IN varchar2, 
            idxname   IN varchar2, 
            moderr    IN sys.odcinumberlist, 
            flags     IN number,
            c1        IN SYS_REFCURSOR) return sys.odcinumberlist
        parallel_enable (partition c1 by any)
       cascade';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: prllidx_create (add index_merge): '||SQLERRM);
end;
/

begin
  execute immediate
   'alter type prllidx_create
      add static function index_load(
            idxschema IN varchar2, 
            idxname   IN varchar2,
            filedir   varchar2, 
            filterpl  varchar2, 
            basepol   sys.ODCIVarchar2List,
            extrParams sys.ODCIVarchar2List,
            ctxpref   fn_xmlpref, 
            extarr    fn_extarr,   
            modarr    sys.ODCINumberList, 
            polrids   sys.ODCIvarchar2List, 
            loadMethod varchar2,
            stagtab_name   varchar2,
            docUri2Rid_name varchar2,
            docVid2Rid_name varchar2,
            is_batchpol     sys.ODCINumberList,
            flags           number,
            cur       SYS_REFCURSOR) return  doublenumlist
        parallel_enable (partition cur by any) pipelined
       cascade';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: prllidx_create (add index_load): '||SQLERRM);
end;
/

begin
  execute immediate
   'alter type prllidx_create
      add static function build_index_partition( 
            idxinfo sys.ODCIIndexInfo, 
            l_modarr sys.ODCINumberList,
            filedir VARCHAR2, 
            filterpl varchar2, 
            l_basepol sys.ODCIVarchar2List,
            l_extrParams sys.ODCIVarchar2List,
            l_ctxpref fn_xmlpref, 
            t_extarr fn_extarr, 
            l_polrids sys.ODCIVarchar2List,
            loadMethod   varchar2,
            stagtab_name varchar2,
            docUri2Rid_name varchar2,
            docVid2Rid_name varchar2,
            xinfotab_name   varchar2,
            flags           number) return number
       cascade';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: prllidx_create (add build_index_partition): '||SQLERRM);
end;
/

begin
  execute immediate
   'alter type prllidx_create
      add static function build_index_batch_extr(
            idxinfo        sys.ODCIIndexInfo,
            l_modarr       sys.ODCINumberList,
            filedir        varchar2,
            filterpl       varchar2,
            l_basepol      sys.ODCIVarchar2List,
            l_batchpol     sys.ODCINumberList,
            l_extrParams   sys.ODCIVarchar2List,
            l_ctxpref      fn_xmlpref,
            t_extarr       fn_extarr,
            l_polrids      sys.ODCIVarchar2List,
            l_errcnt in out sys.ODCINumberList,
            l_docUriPfx     varchar2,
            l_docUriShortPfx  varchar2,
            loadMethod     varchar2,
            stagtab_name    varchar2,
            l_stagtab_suffixes  sys.ODCIvarchar2List,
            docUri2Rid_name  varchar2,
            docVid2Rid_name  varchar2,
            xinfotab_name   varchar2,
            l_sel_basetab  varchar2, 
            flags          number) return number
        cascade';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: prllidx_create (add build_index_batch_extr): '||SQLERRM);
end; 
/

show errors;

grant execute on prllidx_create to public;


@@prvtrdfctx.plb

/*****************************************************************************/
/*** Indextype and Operators                                               ***/
/*****************************************************************************/

-- To make upgrade friendly
-- 1) create dummy operator and associate with SemContext
-- 2) disassociate all operators and bindings (except dummy) from SemContext
-- 3) drop force all operators
-- 4) create operators and associate them with SemContext

-- dummy function --
declare
  object_not_found exception;
  pragma exception_init(object_not_found, -04043);
begin
  execute immediate
   'drop function semctx_dummy_function';
  exception
    when object_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop semctx_dummy_function: '||SQLERRM);
end;
/

create function semctx_dummy_function(param in varchar2)
return number is
begin
  return 1;
end;
/

-- dummy operator --
declare
  operator_not_found exception;
  pragma exception_init(operator_not_found, -29807);
begin
  execute immediate
    'drop operator semctx_dummy';
  exception
    when operator_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop semctx_dummy: '||SQLERRM);
end;
/

begin
  execute immediate
    'create operator semctx_dummy binding
     (varchar2) return number
     using semctx_dummy_function';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create semctx_dummy: '||SQLERRM);
end;
/

-- add dummy operator to semcontext index type --
declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     add semctx_dummy(varchar2)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: add semctx_dummy to SemContext: '||SQLERRM);
end;
/

-- drop all operators associated with the indextype
-- including old ones that are no longer used
declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(varchar2, varchar2)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(varchar2, varchar2): '||SQLERRM);
end;
/

declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(varchar2, varchar2, mdsys.RDF_ALIASES)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(varchar2, varchar2, mdsys.RDF_ALIASES): '||SQLERRM);
end;
/

declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(varchar2, varchar2, varchar2)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(varchar2, varchar2, varchar2: '||SQLERRM);
end;
/

declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(varchar2, varchar2, varchar2, mdsys.RDF_ALIASES)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(varchar2, varchar2, varchar2, mdsys.RDF_ALIASES): '||SQLERRM);
end;
/

declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(varchar2, varchar2, varchar2, integer, mdsys.RDF_ALIASES)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(varchar2, varchar2, varchar2, integer, mdsys.RDF_ALIASES): '||SQLERRM);
end;
/

declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(CLOB, varchar2)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(CLOB, varchar2): '||SQLERRM);
end;
/


declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(CLOB, varchar2, mdsys.RDF_ALIASES)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(CLOB, varchar2, mdsys.RDF_ALIASES): '||SQLERRM);
end;
/

declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(CLOB, varchar2, varchar2)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(CLOB, varchar2, varchar2): '||SQLERRM);
end;
/

declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(CLOB, varchar2, varchar2, mdsys.RDF_ALIASES)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(CLOB, varchar2, varchar2, mdsys.RDF_ALIASES): '||SQLERRM);
end;
/

declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -29833);
begin
  execute immediate
    'alter indextype SemContext
     drop sem_contains(CLOB, varchar2, varchar2, integer, mdsys.RDF_ALIASES)';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains(CLOB, varchar2, varchar2, integer, mdsys.RDF_ALIASES): '||SQLERRM);
end;
/

-- drop all operators --

declare
  operator_not_found exception;
  pragma exception_init(operator_not_found, -29807);
begin
  execute immediate
    'drop operator sem_contains_select force';
  exception
    when operator_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains_select: '||SQLERRM);
end;
/

declare
  operator_not_found exception;
  pragma exception_init(operator_not_found, -29807);
begin
  execute immediate
    'drop operator sem_contains_count force';
  exception
    when operator_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains_count: '||SQLERRM);
end;
/

declare
  operator_not_found exception;
  pragma exception_init(operator_not_found, -29807);
begin
  execute immediate
    'drop operator sem_contains force';
  exception
    when operator_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: drop sem_contains: '||SQLERRM);
end;
/


-- Now create the operators and indextype --
create or replace operator sem_contains binding 
  (VARCHAR2, VARCHAR2) return NUMBER 
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains,
  (VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES) return NUMBER 
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains,
  (VARCHAR2, VARCHAR2, VARCHAR2) return NUMBER
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains,
  (VARCHAR2, VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES) return NUMBER
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains,
  (CLOB, VARCHAR2) return NUMBER
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains, 
  (CLOB, VARCHAR2, mdsys.RDF_ALIASES) return NUMBER
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains, 
  (CLOB, VARCHAR2, VARCHAR2) return NUMBER
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains,
  (CLOB, VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES) return NUMBER
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains,
  (VARCHAR2, VARCHAR2, VARCHAR2, INTEGER, mdsys.RDF_ALIASES) return NUMBER
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains,
  (CLOB, VARCHAR2, VARCHAR2, INTEGER, mdsys.RDF_ALIASES) return NUMBER
    WITH INDEX CONTEXT, SCAN CONTEXT  SemContextIndexMethods
    COMPUTE ANCILLARY DATA
    USING mdsys.sem_rdfctx_oper.sem_contains; 

grant execute on sem_contains to public; 

create or replace public synonym sem_contains for mdsys.sem_contains; 

create or replace operator sem_contains_select binding
   (NUMBER) return CLOB
    ANCILLARY TO mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2), 
                 mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2, VARCHAR2),
                 mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2, VARCHAR2, INTEGER,  mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2, VARCHAR2),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2, VARCHAR2, INTEGER, mdsys.RDF_ALIASES)
    USING mdsys.sem_rdfctx_oper.sem_rdfctx_select; 

grant execute on sem_contains_select to public;

create or replace public synonym sem_contains_select for mdsys.sem_contains_select; 

create or replace operator sem_contains_count binding
    (NUMBER) return NUMBER
    ANCILLARY TO mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2),
                 mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2, VARCHAR2),
                 mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (VARCHAR2, VARCHAR2, VARCHAR2, INTEGER, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2, VARCHAR2),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
                 mdsys.SEM_CONTAINS (CLOB, VARCHAR2, VARCHAR2, INTEGER, mdsys.RDF_ALIASES)
    USING mdsys.sem_rdfctx_oper.sem_rdfctx_count; 

grant execute on sem_contains_count to public;

create or replace public synonym sem_contains_count for mdsys.sem_contains_count; 

-- initially create indextype with dummy operator in case it doesn't exist --
declare
  indextype_not_found exception;
  pragma exception_init(indextype_not_found, -00955);
begin
  execute immediate
   'create indextype SemContext for
      semctx_dummy(varchar2)
    using SemContextIndexMethods
    with local range partition';
  exception
    when indextype_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: create SemContext indextype: '||SQLERRM);
end;
/

-- alter index in case of upgrade --
alter indextype SemContext
using SemContextIndexMethods
with local range partition;

-- add current set of operators
alter indextype SemContext 
  add SEM_CONTAINS(VARCHAR2, VARCHAR2),
  add SEM_CONTAINS(VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
  add SEM_CONTAINS(VARCHAR2, VARCHAR2, VARCHAR2),
  add SEM_CONTAINS(VARCHAR2, VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
  add SEM_CONTAINS(VARCHAR2, VARCHAR2, VARCHAR2, INTEGER, mdsys.RDF_ALIASES),
  add SEM_CONTAINS(CLOB, VARCHAR2),
  add SEM_CONTAINS(CLOB, VARCHAR2, mdsys.RDF_ALIASES),
  add SEM_CONTAINS(CLOB, VARCHAR2, VARCHAR2),
  add SEM_CONTAINS(CLOB, VARCHAR2, VARCHAR2, mdsys.RDF_ALIASES),
  add SEM_CONTAINS(CLOB, VARCHAR2, VARCHAR2, INTEGER, mdsys.RDF_ALIASES);

grant execute on SemContext to public;

-- cleanup (drop dummies) --
begin
  execute immediate
    'alter indextype SemContext
     drop semctx_dummy(varchar2)';
  exception
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: cleanup drop semctx_dummy(varchar2): '||SQLERRM);
end;
/

declare
  operator_not_found exception;
  pragma exception_init(operator_not_found, -29807);
begin
  execute immediate
    'drop operator semctx_dummy force';
  exception
    when operator_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: cleanup drop semctx_dummy: '||SQLERRM);
end;
/

declare
  object_not_found exception;
  pragma exception_init(object_not_found, -04043);
begin
  execute immediate
   'drop function semctx_dummy_function';
  exception
    when object_not_found then NULL;
    when others then
      SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE, 
        'SEM_INSTALL: sdordfctx: cleanup drop semctx_dummy_function: '||SQLERRM);
end;
/

-- update rdf_parameter
declare
  table_not_found exception;
  pragma exception_init(table_not_found, -00942);
begin
  insert into mdsys.rdf_parameter (namespace, attribute, value, description)
     values ('COMPONENT','RDFCTX','INSTALLED','Semantic (Text) Search component'); 
  exception 
    when table_not_found then null;
    when dup_val_on_index then null;
end;
/
commit; 


Rem ********************************************************************
Rem #16473696: Indicate Oracle-Supplied object
@?/rdbms/admin/sqlsessend.sql
Rem ********************************************************************


OHA YOOOO