MINI MINI MANI MO
Rem
Rem $Header: sdo/admin/sdolrsmd.sql /main/21 2017/10/20 11:01:24 rjanders Exp $
Rem
Rem sdolrsmd.sql
Rem
Rem Copyright (c) 2001, 2017, Oracle and/or its affiliates.
Rem All rights reserved.
Rem
Rem NAME
Rem sdolrsmd.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/sdolrsmd.sql
Rem SQL_SHIPPED_FILE: md/admin/sdolrsmd.sql
Rem SQL_PHASE: SDOLRSMD
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 10/08/17 - Add MDSYS to spatial type
Rem rjanders 06/30/17 - Add SYS/MDSYS prefixes
Rem jcwang 06/12/17 - bug-26182373 use session_user in triggers
Rem rjanders 05/10/17 - #26037683: Raise 'when other' exceptions
Rem rjanders 04/13/17 - #25814260: Allow quoted bumpy-case usernames
Rem rjanders 03/23/17 - #25437999: Remove 'when others then NULL'
Rem handlers
Rem sravada 01/11/17 - bug 25370681
Rem jcwang 09/09/15 - add SQL file metadata
Rem rjanders 02/01/15 - #20418139: Cannot grant SELECT to PUBLIC
Rem rjanders 01/02/15 - long identifier project phase 1
Rem rjanders 09/16/13 - OCCS: Remove hardtabs
Rem rjanders 03/15/13 - #16473696: Start/End _ORACLE_SCRIPT
Rem initialization
Rem rjanders 03/14/12 - Change upper() to nls_upper() [security]
Rem jcwang 05/10/11 - change current_schema to current_user
Rem sravada 02/25/05 - bug 4206128
Rem sravada 07/29/04 - add exception handlers
Rem sravada 04/20/04 - bug 3575747
Rem sravada 12/17/02 - remove drop index
Rem sravada 04/26/02 - remove dba views
Rem jcwang 10/03/01 - Merged jcwang_lrs_metadata
Rem jcwang 09/21/01 - Created
Rem
Rem ********************************************************************
Rem #16473696: Indicate Oracle-Supplied object
@@?/rdbms/admin/sqlsessstart.sql
Rem ********************************************************************
--
-- Metadata for LRS Geometry Layer
--
-- drop public synonym user_sdo_lrs_metadata;
-- drop public synonym all_sdo_lrs_metadata;
-- NOTE: DO NOT change this table definition - for backward compatibility,
-- ALL future table modifications MUST be done using ALTER TABLE operations.
declare
already_exists exception;
pragma exception_init(already_exists, -00955);
begin
begin
execute immediate
' Create Table MDSYS.SDO_LRS_METADATA_TABLE (
SDO_OWNER VARCHAR2(32),
SDO_TABLE_NAME VARCHAR2(32) NOT NULL,
SDO_COLUMN_NAME VARCHAR2(32) NOT NULL,
SDO_DIM_POS NUMBER NOT NULL,
SDO_DIM_UNIT VARCHAR2(32),
CHECK (SDO_DIM_POS = 3 OR SDO_DIM_POS = 4),
CONSTRAINT unique_tables
PRIMARY KEY (SDO_OWNER, SDO_TABLE_NAME,SDO_COLUMN_NAME)) ';
exception
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdolrsmd.sql(' || $$PLSQL_LINE || ')1]: ' || SQLERRM); RAISE;
end;
end;
/
SHOW ERRORS
-- 12.2: Increase SDO_OWNER, SDO_TABLE_NAME column size from 32 to 130
begin
execute immediate
' alter table MDSYS.SDO_LRS_METADATA_TABLE
modify ( SDO_OWNER VARCHAR2(130),
SDO_TABLE_NAME VARCHAR2(130),
SDO_COLUMN_NAME VARCHAR2(130) ) ';
exception when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'alter table SDO_LRS_METADATA_TABLE ERROR=' || SQLERRM);
end;
/
SHOW ERRORS
-- drop view MDSYS.USER_SDO_LRS_METADATA;
Create or replace view MDSYS.USER_SDO_LRS_METADATA AS
SELECT SDO_TABLE_NAME TABLE_NAME,
SDO_COLUMN_NAME COLUMN_NAME,
SDO_DIM_POS DIM_POS,
SDO_DIM_UNIT DIM_UNIT
FROM MDSYS.SDO_LRS_METADATA_TABLE,
(select sys_context('userenv', 'CURRENT_USER') username from SYS.DUAL)
WHERE sdo_owner = username;
-- drop view MDSYS.ALL_SDO_LRS_METADATA;
Create or replace view MDSYS.ALL_SDO_LRS_METADATA AS
SELECT SDO_OWNER OWNER,
SDO_TABLE_NAME TABLE_NAME,
SDO_COLUMN_NAME COLUMN_NAME,
SDO_DIM_POS DIM_POS,
SDO_DIM_UNIT DIM_UNIT
FROM MDSYS.SDO_LRS_METADATA_TABLE;
declare
already_exists exception;
pragma exception_init(already_exists, -00955);
begin
begin
execute immediate
' CREATE INDEX MDSYS.SDO_LRS_META_IDX ON
MDSYS.SDO_LRS_METADATA_TABLE(SDO_OWNER,SDO_TABLE_NAME) ';
exception
when already_exists then NULL;
when others then
SYS.DBMS_SYSTEM.KSDWRT(SYS.DBMS_SYSTEM.TRACE_FILE,
'EXCEPTION[sdolrsmd.sql(' || $$PLSQL_LINE || ')2]: ' || SQLERRM); RAISE;
end;
end;
/
grant select,insert,delete,update on mdsys.user_sdo_lrs_metadata to public;
grant read on mdsys.all_sdo_lrs_metadata to public;
create or replace public synonym user_sdo_lrs_metadata for
mdsys.user_sdo_lrs_metadata;
create or replace public synonym all_sdo_lrs_metadata for
mdsys.all_sdo_lrs_metadata;
-- SDO_LRS_METADATA_TABLE triggers
CREATE OR REPLACE TRIGGER MDSYS.SDO_LRS_TRIG_INS
INSTEAD OF INSERT ON mdsys.user_sdo_lrs_metadata
REFERENCING NEW AS n
FOR EACH ROW
declare
user_name varchar2(130);
stmt varchar2(2048);
vcount INTEGER;
BEGIN
user_name := sys_context('userenv', 'session_user');
if ( (instr(:n.table_name, ' ') > 0) OR
(instr(:n.table_name, '''') > 0) ) then
mderr.raise_md_error('MD', 'SDO', -13223,
:n.table_name||'.'||:n.column_name);
end if;
if ( (instr(:n.column_name, ' ') > 0) OR
(instr(:n.column_name, '''') > 0) ) then
mderr.raise_md_error('MD', 'SDO', -13223,
:n.table_name||'.'||:n.column_name);
end if;
/*
stmt := 'SELECT count(*) FROM MDSYS.SDO_LRS_METADATA_TABLE ' ||
' WHERE sdo_owner = ''' || sdo_util.get_quoted_name(user_name) || ''' ' ||
' AND sdo_table_name = ''' || nls_upper(replace(:n.table_name,'''',''))
|| ''' ' ||
' AND sdo_column_name = ''' || nls_upper(replace(:n.column_name,'''',''))|| ''' ';
*/
stmt := 'SELECT count(*) FROM MDSYS.SDO_LRS_METADATA_TABLE ' ||
' WHERE sdo_owner = :owner AND sdo_table_name = :tab ' ||
' AND sdo_column_name = :col ';
EXECUTE IMMEDIATE stmt INTO vcount
USING sdo_util.get_quoted_name(user_name), nls_upper(:n.table_name), nls_upper(:n.column_name) ;
IF vcount = 0 THEN
INSERT INTO MDSYS.sdo_lrs_metadata_table values
(sdo_util.get_quoted_name(user_name), nls_upper(:n.table_name), nls_upper(:n.column_name), :n.dim_pos, nls_upper(:n.dim_unit));
ELSE
mderr.raise_md_error('MD', 'SDO', -13223,
user_name||'.'||:n.table_name);
END IF;
END;
/
show errors;
CREATE OR REPLACE TRIGGER MDSYS.SDO_LRS_TRIG_DEL
INSTEAD OF DELETE ON mdsys.user_sdo_lrs_metadata
REFERENCING OLD AS n
FOR EACH ROW
declare
user_name varchar2(130);
stmt varchar2(2048);
vcount INTEGER;
BEGIN
user_name := sys_context('userenv', 'session_user');
DELETE FROM MDSYS.sdo_lrs_metadata_table
WHERE SDO_OWNER = user_name
AND SDO_TABLE_NAME = nls_upper(:n.table_name)
AND SDO_COLUMN_NAME = nls_upper(:n.column_name);
END;
/
show errors;
CREATE OR REPLACE TRIGGER MDSYS.SDO_LRS_TRIG_UPD
INSTEAD OF UPDATE ON mdsys.user_sdo_lrs_metadata
REFERENCING OLD AS old NEW AS n
FOR EACH ROW
declare
user_name varchar2(130);
stmt varchar2(2048);
vcount INTEGER;
BEGIN
user_name := sys_context('userenv', 'session_user');
UPDATE MDSYS.sdo_lrs_metadata_table
SET (SDO_TABLE_NAME, SDO_COLUMN_NAME, SDO_DIM_POS, SDO_DIM_UNIT) =
(SELECT nls_upper(:n.table_name), nls_upper(:n.column_name),:n.dim_pos, nls_upper(:n.dim_unit) FROM SYS.DUAL)
WHERE SDO_OWNER = sdo_util.get_quoted_name(user_name)
AND SDO_TABLE_NAME = nls_upper(:old.table_name)
AND SDO_COLUMN_NAME = nls_upper(:old.column_name);
END;
/
show errors;
/
show errors;
Rem ********************************************************************
Rem #16473696: Indicate Oracle-Supplied object
@?/rdbms/admin/sqlsessend.sql
Rem ********************************************************************
OHA YOOOO