-- #############################################################################################
--
-- %Purpose: Set PRIVATE SYNONYMs to Schema of a connected Oracle User
--
-- Use:      Each Oracle User
--
-- #############################################################################################
--
set termout on;
set feed off;
set pagesize 10000;
set wrap off;
set linesize 200;
set heading off;
set tab on;
set scan on;
set verify off;
--
PROMPT
PROMPT **** PRIVATE SYNONYME auf waehlbares Schema setzen *****
PROMPT
PROMPT Sie brauchen Schreibrechte im aktuellen Verzeichnis,
PROMPT damit das SQL-Script gen_private_syn.sql generiert
PROMPT werden kann. Dieses wird (leider) nach der Ausfuehrung
PROMPT nicht automatisch geloescht, da sqlplus leider nicht
PROMPT weiss wie man das macht ...
PROMPT
PROMPT ********************************************************
PROMPT
WHENEVER SQLERROR EXIT SQL.CODE
ACCEPT schema_name CHAR PROMPT 'Enter Schema (Object Owner): '
--
-- Generate and run file with synonym commands in current directory
--
set termout off;
spool GEN_PRIVATE_SYN.SQL;
SELECT 'DROP SYNONYM '||synonym_name||';' FROM user_synonyms;
--
SELECT 'CREATE SYNONYM '||table_name||' FOR &&schema_name'||'.'||table_name ||';'
  FROM all_tables
 WHERE (UPPER(owner) LIKE UPPER('%&&schema_name%') OR
        UPPER(owner) LIKE UPPER('&&schema_name'));
--
SELECT 'CREATE SYNONYM '||sequence_name||' FOR &&schema_name'||'.'||sequence_name ||';'
  FROM all_sequences
 WHERE (UPPER(sequence_owner) LIKE UPPER('%&&schema_name%') OR
        UPPER(sequence_owner) LIKE UPPER('&&schema_name'));
--
SELECT DISTINCT 'CREATE SYNONYM '||name||' FOR &&schema_name'||'.'||name||';'
  FROM all_source
 WHERE (UPPER(owner) LIKE UPPER('%&&schema_name%') OR
        UPPER(owner) LIKE UPPER('&&schema_name'))
   AND UPPER(type) IN ('PROCEDURE','FUNCTION','PACKAGE');
spool off;
set feed on;
set termout on;
@GEN_PRIVATE_SYN.SQL;
EXIT;
