MINI MINI MANI MO

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

Rem
Rem $Header: sdo/admin/sdotxth.sql /main/20 2017/07/05 11:00:10 rjanders Exp $
Rem
Rem sdotxth.sql
Rem
Rem Copyright (c) 2004, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      sdotxth.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/sdotxth.sql
Rem    SQL_SHIPPED_FILE: md/admin/sdotxth.sql
Rem    SQL_PHASE: SDOTXTH
Rem    SQL_STARTUP_MODE: NORMAL
Rem    SQL_IGNORABLE_ERRORS: NONE
Rem    SQL_CALLING_FILE: sdo/admin/catmdlocp2.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    rjanders    03/09/17 - Add missing SQL_FILE_METADATA information
Rem    sravada     01/11/17 - bug 25370681
Rem    sravada     06/29/15 - change CURRENT_SCHEMA to CURRENT_USER
Rem    rjanders    02/01/15 - #20418139: Cannot grant SELECT to PUBLIC
Rem    rjanders    01/02/15 - long identifier project phase 1
Rem    rjanders    03/15/13 - #16473696: Start/End _ORACLE_SCRIPT
Rem                           initialization
Rem    rjanders    03/14/12 - Change upper() to nls_upper() [security]
Rem    rjanders    03/29/11 - Use static SQL for sdo_geom_mbr() calls
Rem    sravada     02/18/11 - bug 11773016
Rem    rjanders    02/04/11 - Use sdo_geom_mbr() for performance
Rem    sravada     01/08/10 - bug 9242098
Rem    sravada     06/11/07 - add MAP_BASE_SCALE
Rem    sravada     05/12/05 - sravada_sdo_text_object
Rem    sravada     04/29/05 - use XMLType 
Rem    sravada     09/28/04 - Created
Rem


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

declare
  already_exists exception;
  pragma exception_init(already_exists, -00955);
begin
  begin
   execute immediate
   ' CREATE TYPE ST_ANNOTATIONTEXTELEMENT 
    TIMESTAMP ''2007-04-09:14:32:18''
    OID ''2DB35096FA255AAAE040578CB2054232''
    AS OBJECT ( 
      privateValue  VARCHAR2(4000),
      privateLocation SDO_GEOMETRY,
      privateLeaderLine SDO_GEOMETRY,
      privateTextAttributes VARCHAR2(4000),
      MEMBER FUNCTION Value Return VARCHAR2,
    MEMBER FUNCTION Value(Value VARCHAR2)  RETURN ST_ANNOTATIONTEXTELEMENT,
    MEMBER FUNCTION Location Return SDO_GEOMETRY,
    MEMBER FUNCTION Location(Location SDO_GEOMETRY)
                  RETURN ST_ANNOTATIONTEXTELEMENT,
    MEMBER FUNCTION LeaderLine Return SDO_GEOMETRY,
    MEMBER FUNCTION LeaderLine(LeaderLine SDO_GEOMETRY)
         RETURN ST_ANNOTATIONTEXTELEMENT,
    MEMBER FUNCTION TextAttributes Return VARCHAR2,
    MEMBER FUNCTION TextAttributes(TextAttributes VARCHAR2)
       RETURN ST_ANNOTATIONTEXTELEMENT)  ';
   exception
     when already_exists then NULL;
     when others then
       SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                              'EXCEPTION[sdotxth.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); RAISE;
 end;
end;
/

declare
  already_exists exception;
  pragma exception_init(already_exists, -00955);
begin
  begin
    execute immediate 
    ' CREATE TYPE ST_ANNOT_TEXTELEMENT_ARRAY
      TIMESTAMP ''2007-05-02:14:39:39'' 
      OID ''2F80B03E6FDAE823E040578CB20532C8'' 
      AS VARRAY (100000000) OF ST_ANNOTATIONTEXTELEMENT ';
     exception
       when already_exists then NULL;
       when others then
         SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                                'EXCEPTION[sdotxth.sql(' || $$PLSQL_LINE || ')2]: ' || SQLERRM); RAISE;
  end;

  begin
   execute immediate
   ' CREATE TYPE ST_ANNOTATIONTEXTELEMENT_ARRAY 
    TIMESTAMP ''2007-04-09:14:30:52''
    OID ''2DB33C751BDEB376E040578CB2054050''
    AS OBJECT (
     privateArray  ST_ANNOT_TEXTELEMENT_ARRAY ,
    MEMBER FUNCTION ElementN ( aposition INTEGER)
          RETURN ST_ANNOTATIONTEXTELEMENT,
    MEMBER FUNCTION ElementN ( element ST_ANNOTATIONTEXTELEMENT, aposition INTEGER)  RETURN ST_ANNOTATIONTEXTELEMENT_ARRAY )  ';
   exception
     when already_exists then NULL;
     when others then
       SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                              'EXCEPTION[sdotxth.sql(' || $$PLSQL_LINE || ')3]: ' || SQLERRM); RAISE;
 end;
end;
/



declare
  already_exists exception;
  pragma exception_init(already_exists, -00955);
begin
   begin
   execute immediate
  ' CREATE  TYPE ST_ANNOTATION_TEXT
    TIMESTAMP ''2007-04-09:14:17:08''
    OID ''2DB30B30F84E6D01E040578CB2053BB0''
    AS OBJECT (
       PrivateEnvelope     SDO_GEOMETRY,
       PrivateElement_Array    ST_ANNOTATIONTEXTELEMENT_ARRAY,
       CONSTRUCTOR FUNCTION ST_ANNOTATION_TEXT(anTextArray ST_ANNOTATIONTEXTELEMENT_ARRAY ) RETURN SELF AS RESULT,
       MEMBER FUNCTION CONCAT (anText ST_ANNOTATION_TEXT)
             RETURN ST_ANNOTATION_TEXT,
      MEMBER FUNCTION Envelope RETURN SDO_GEOMETRY,
      MEMBER FUNCTION Element_Array RETURN ST_ANNOTATIONTEXTELEMENT_ARRAY)  ';
   exception
     when already_exists then NULL;
     when others then
       SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                              'EXCEPTION[sdotxth.sql(' || $$PLSQL_LINE || ')4]: ' || SQLERRM); RAISE;
 end;
end;
/
 

CREATE OR REPLACE TYPE BODY ST_ANNOTATIONTEXTELEMENT IS
 MEMBER FUNCTION Value Return VARCHAR2 is
 BEGIN
  RETURN SELF.privateValue;
 END;

 MEMBER FUNCTION Value(Value VARCHAR2)  RETURN ST_ANNOTATIONTEXTELEMENT IS
 BEGIN
  RETURN ST_ANNOTATIONTEXTELEMENT(value, SELF.PRIVATELOCATION,
           SELF.PRIVATELEADERLINE, SELF.PRIVATETEXTATTRIBUTES);
 END;
 
 MEMBER FUNCTION Location Return SDO_GEOMETRY is
 BEGIN
  RETURN SELF.privateLocation;
 END;

 MEMBER FUNCTION Location(Location SDO_GEOMETRY) 
    RETURN ST_ANNOTATIONTEXTELEMENT IS
 BEGIN
  RETURN ST_ANNOTATIONTEXTELEMENT(SELF.Value, LOCATION,
           SELF.PRIVATELEADERLINE, SELF.PRIVATETEXTATTRIBUTES);
 END;

 MEMBER FUNCTION LeaderLine Return SDO_GEOMETRY is
 BEGIN
  RETURN SELF.privateLeaderLine;
 END;

 MEMBER FUNCTION LeaderLine(LeaderLine SDO_GEOMETRY)     
     RETURN ST_ANNOTATIONTEXTELEMENT IS
 BEGIN
  RETURN ST_ANNOTATIONTEXTELEMENT(SELF.Value, SELF.PRIVATELOCATION,
           LEADERLINE, SELF.PRIVATETEXTATTRIBUTES);
 END;

 MEMBER FUNCTION TextAttributes Return VARCHAR2 is
 BEGIN
  RETURN SELF.privateTextAttributes;
 END;

 MEMBER FUNCTION TextAttributes(TextAttributes VARCHAR2)  
  RETURN ST_ANNOTATIONTEXTELEMENT IS
 BEGIN
  RETURN ST_ANNOTATIONTEXTELEMENT(SELF.Value, SELF.PRIVATELOCATION,
           SELF.PRIVATELEADERLINE, TEXTATTRIBUTES);
 END;
END;
/

show errors;

CREATE OR REPLACE TYPE BODY ST_ANNOTATIONTEXTELEMENT_ARRAY IS
 MEMBER FUNCTION ElementN ( aposition INTEGER) 
    RETURN ST_ANNOTATIONTEXTELEMENT IS
 BEGIN
   IF (aposition > SELF.PRIVATEARRAY.count) THEN
        RETURN NULL;
   END IF;
   RETURN SELF.PRIVATEARRAY(aposition);
 END;

 MEMBER FUNCTION ElementN (element ST_ANNOTATIONTEXTELEMENT, aposition INTEGER) 
    RETURN ST_ANNOTATIONTEXTELEMENT_ARRAY IS
  tarray ST_ANNOT_TEXTELEMENT_ARRAY;
 BEGIN
   tarray := SELF.PRIVATEARRAY;
   IF (aposition > SELF.PRIVATEARRAY.count) THEN
        RETURN NULL;
   END IF;
   tarray(aposition) := element;
   RETURN ST_ANNOTATIONTEXTELEMENT_ARRAY(tarray);
 END;
END;
/

show errors;

CREATE OR REPLACE TYPE BODY  ST_ANNOTATION_TEXT IS
 CONSTRUCTOR FUNCTION ST_ANNOTATION_TEXT(anTextArray 
               ST_ANNOTATIONTEXTELEMENT_ARRAY ) RETURN SELF AS RESULT IS
  mbr SDO_GEOMETRY;
  geom SDO_GEOMETRY;
  idx number;
  anText ST_ANNOTATIONTEXTELEMENT;
 BEGIN
   geom := null;
   FOR idx in 1 .. anTextArray.PRIVATEARRAY.count LOOP
     anText := anTextArray.ElementN(idx);
     IF (anText.PRIVATELEADERLINE is NULL) THEN
       mbr := sdo_3gl.sdo_mbr(anText.PRIVATELOCATION,anText.PRIVATELOCATION);
     ELSE
       mbr := sdo_3gl.sdo_mbr(anText.PRIVATELOCATION, anText.PRIVATELEADERLINE);
     END IF;
     geom := sdo_util.append(geom, mbr);
   END LOOP;
   -- PRIVATEENVELOPE := sdo_geom.sdo_mbr(geom);
   -- EXECUTE IMMEDIATE 'select sdo_geom_mbr(:1) from SYS.DUAL' 
     -- into PRIVATEENVELOPE using geom;
   select sdo_geom_mbr(geom) into PRIVATEENVELOPE from SYS.DUAL;
   PRIVATEELEMENT_ARRAY := anTextArray; 
   RETURN;
 END;
       
 MEMBER FUNCTION CONCAT (anText ST_ANNOTATION_TEXT)
             RETURN ST_ANNOTATION_TEXT IS
  prvArray ST_ANNOT_TEXTELEMENT_ARRAY;
 BEGIN
    prvArray := ST_ANNOT_TEXTELEMENT_ARRAY();
    prvArray.extend(anText.PRIVATEELEMENT_ARRAY.PRIVATEARRAY.count+
                      SELF.PRIVATEELEMENT_ARRAY.PRIVATEARRAY.count);
    FOR idx in 1 .. SELF.PRIVATEELEMENT_ARRAY.PRIVATEARRAY.count LOOP
     prvArray(idx) := SELF.PRIVATEELEMENT_ARRAY.PRIVATEARRAY(idx);
    END LOOP;
    FOR idx in 1 .. anText.PRIVATEELEMENT_ARRAY.PRIVATEARRAY.count LOOP
     prvArray(idx+anText.PRIVATEELEMENT_ARRAY.PRIVATEARRAY.count) := 
                  anText.PRIVATEELEMENT_ARRAY.PRIVATEARRAY(idx);
    END LOOP;
   RETURN ST_ANNOTATION_TEXT(ST_ANNOTATIONTEXTELEMENT_ARRAY(prvArray));
 END;
 MEMBER FUNCTION Envelope RETURN SDO_GEOMETRY IS
 BEGIN
   RETURN PRIVATEENVELOPE;
 END;
 MEMBER FUNCTION Element_Array RETURN ST_ANNOTATIONTEXTELEMENT_ARRAY  IS
 BEGIN
   RETURN PRIVATEELEMENT_ARRAY;
 END;
END;
/



grant execute on ST_ANNOTATIONTEXTELEMENT to public;
grant execute on ST_ANNOT_TEXTELEMENT_ARRAY to public;
grant execute on ST_ANNOTATIONTEXTELEMENT_ARRAY to public;
grant execute on ST_ANNOTATION_TEXT to public;

create or replace public synonym ST_ANNOTATIONTEXTELEMENT for  MDSYS.ST_ANNOTATIONTEXTELEMENT ;
create or replace public synonym ST_ANNOT_TEXTELEMENT_ARRAY for  MDSYS.ST_ANNOT_TEXTELEMENT_ARRAY ;
create or replace public synonym ST_ANNOTATIONTEXTELEMENT_ARRAY for  MDSYS.ST_ANNOTATIONTEXTELEMENT_ARRAY ;
declare
begin
  begin
    execute immediate
        ' create or replace public synonym ST_ANNOTATION_TEXT for ' ||
        '  MDSYS.ST_ANNOTATION_TEXT ' ;
    exception
      when others then
        SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                               'EXCEPTION[sdotxth.sql(' || $$PLSQL_LINE || ')5]: ' || SQLERRM); RAISE;
   end;
end;
/



declare
  already_exists exception;
  pragma exception_init(already_exists, -00955);
begin
   begin
     EXECUTE IMMEDIATE
      ' CREATE TABLE SDO_ANNOTATION_TEXT_METADATA (
        F_TABLE_CATALOG               VARCHAR2(1000),
        F_TABLE_SCHEMA                VARCHAR2(32),
        F_TABLE_NAME                  VARCHAR2(32),
        F_TEXT_COLUMN                 VARCHAR2(1024),
        MAP_BASE_SCALE                NUMBER,
        TEXT_DEFAULT_EXPRESSION       VARCHAR2(4000),
        TEXT_DEFAULT_ATTRIBUTES       VARCHAR2(4000), 
        CONSTRAINT unique_text_layers
             PRIMARY KEY (F_TABLE_SCHEMA,F_TABLE_NAME,F_TEXT_COLUMN) ) ';
   exception
     when already_exists then NULL;
     when others then
       SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
                              'EXCEPTION[sdotxth.sql(' || $$PLSQL_LINE || ')6]: ' || SQLERRM); RAISE;
   end;
end;
/
SHOW ERRORS

begin
  execute immediate
 ' alter table SDO_ANNOTATION_TEXT_METADATA
   modify ( F_TABLE_SCHEMA VARCHAR2(130),
            F_TABLE_NAME VARCHAR2(130) ) ';
  exception
      when others then
        SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
          'alter table SDO_ANNOTATION_TEXT_METADATA ERROR=' || SQLERRM);
end;
/
SHOW ERRORS

CREATE OR REPLACE VIEW USER_ANNOTATION_TEXT_METADATA AS
SELECT F_TABLE_NAME TABLE_NAME, F_TEXT_COLUMN COLUMN_NAME,
               MAP_BASE_SCALE,
               TEXT_DEFAULT_EXPRESSION TEXT_EXPRESSION ,
               TEXT_DEFAULT_ATTRIBUTES TEXT_ATTRIBUTES
FROM SDO_ANNOTATION_TEXT_METADATA
WHERE F_TABLE_SCHEMA =  sys_context('userenv', 'CURRENT_USER');

         
CREATE OR REPLACE VIEW ALL_ANNOTATION_TEXT_METADATA AS
SELECT F_TABLE_SCHEMA OWNER, F_TABLE_NAME TABLE_NAME, 
               F_TEXT_COLUMN COLUMN_NAME,
               MAP_BASE_SCALE,
               TEXT_DEFAULT_EXPRESSION TEXT_EXPRESSION,
               TEXT_DEFAULT_ATTRIBUTES TEXT_ATTRIBUTES
FROM SDO_ANNOTATION_TEXT_METADATA, SYS.ALL_OBJECTS a
       where a.object_name = F_TABLE_NAME and a.owner = F_TABLE_SCHEMA 
             and a.object_type in ('TABLE', 'SYNONYM', 'VIEW');
 

CREATE OR REPLACE TRIGGER SDO_ANNOT_TRIG_INS1
INSTEAD OF INSERT OR DELETE OR UPDATE ON MDSYS.USER_ANNOTATION_TEXT_METADATA
REFERENCING NEW AS n OLD as o
FOR EACH ROW
declare
 tname varchar2(130);
begin

  IF INSERTING THEN 
 EXECUTE IMMEDIATE
  'SELECT user FROM SYS.DUAL' into tname;
      INSERT INTO SDO_ANNOTATION_TEXT_METADATA values(null,tname,
            nls_upper(:n.table_name), nls_upper(:n.column_name), :n.MAP_BASE_SCALE,
                 :n.TEXT_EXPRESSION,
             :n.TEXT_ATTRIBUTES);
  ELSIF UPDATING THEN
 EXECUTE IMMEDIATE
  'SELECT user FROM SYS.DUAL' into tname;
  UPDATE SDO_ANNOTATION_TEXT_METADATA SET(F_TABLE_SCHEMA,
             F_TABLE_NAME,F_TEXT_COLUMN, MAP_BASE_SCALE, TEXT_DEFAULT_EXPRESSION,
                    TEXT_DEFAULT_ATTRIBUTES) =
   (SELECT tname, :n.table_name, :n.column_name, :n.MAP_BASE_SCALE,
                    :n.TEXT_EXPRESSION,
           :n.TEXT_ATTRIBUTES FROM SYS.DUAL)
  WHERE F_TABLE_SCHEMA =  tname AND
     F_TABLE_NAME = :o.table_name AND F_TEXT_COLUMN = :o.column_name;
  ELSE
 EXECUTE IMMEDIATE
  'SELECT user FROM SYS.DUAL' into tname;
   DELETE FROM SDO_ANNOTATION_TEXT_METADATA
    WHERE  F_TABLE_SCHEMA =  tname AND
     F_TABLE_NAME = :o.table_name AND F_TEXT_COLUMN = :o.column_name;
  END IF;
end;
/


grant read on ALL_ANNOTATION_TEXT_METADATA to public;
grant select,insert,update,delete on USER_ANNOTATION_TEXT_METADATA to public;

create or replace public synonym USER_ANNOTATION_TEXT_METADATA 
for MDSYS.USER_ANNOTATION_TEXT_METADATA;

create or replace public synonym ALL_ANNOTATION_TEXT_METADATA 
for MDSYS.ALL_ANNOTATION_TEXT_METADATA;






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


OHA YOOOO