MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/rdbms/admin/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/rdbms/admin/catexp.sql

Rem
Rem $Header: rdbms/admin/catexp.sql /main/411 2016/12/09 14:02:13 sramakri Exp $ expvew.sql
Rem
Rem Copyright (c) 1987, 2016, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem NAME
Rem    CATEXP81.SQL - CATalog EXPort/import sql script
Rem  FUNCTION
Rem    Creates internal views for Export/Import utility
Rem  NOTES
Rem    Must be run when connected to SYS or INTERNAL.
Rem
Rem    This file is organized into 3 sections:
Rem     Section 1: Views needed by BOTH export and import
Rem     Section 2: Views required by import ONLY
Rem     Section 3: Views required by export ONLY
Rem
Rem     Import does not currently require any views of its own. The views
Rem     used by both tools are moved to the top so that a user doing an import
Rem     only has to run part of this file. Since there are common views
Rem     a separate file called catimp.sql was not created for now for
Rem     maintenance reasons.
Rem
Rem     No views depend on catalog.sql. This script can be run standalone.
Rem
Rem
Rem
Rem BEGIN SQL_FILE_METADATA
Rem SQL_SOURCE_FILE: rdbms/admin/catexp.sql
Rem SQL_SHIPPED_FILE: rdbms/admin/catexp.sql
Rem SQL_PHASE: CATEXP
Rem SQL_STARTUP_MODE: NORMAL
Rem SQL_IGNORABLE_ERRORS: NONE
Rem SQL_CALLING_FILE: rdbms/admin/catalog.sql
Rem END SQL_FILE_METADATA
Rem
Rem  MODIFIED
Rem     sramakri   06/14/16 - Remove CDC from 12.2
Rem     mjangir    01/06/16 - bug 22380919
Rem     jjanosik   11/23/15 - rti 18756088 - undo fix for bug 13611733
Rem     jjanosik   09/23/15 - bug 13611733: Fix grants per bug requirements
Rem     mjangir    09/17/15 - bug 21863092: do not export apex_050000
Rem     mjangir    07/02/15 - bug 21360920: repalce v$ with x$ in view imprbs
Rem     jorgrive   03/25/15 - Do not export GGSYS user
Rem     mjangir    02/18/15 - bug 20064901: add view imprbs
Rem     mjangir    01/21/15 - bug 20391825: support long identifiers
Rem     skayoor    11/30/14 - Proj 58196: Change Select priv to Read Priv
Rem     sudurai    11/25/14 - proj 49581 - optimizer stats encryption
Rem     sanbhara   04/23/14 - Project 46816 - adding support for SYSRAC.
Rem     surman     12/29/13 - 13922626: Update SQL metadata
Rem     sasounda   11/19/13 - 17746252: handle KZSRAT when creating all_* views
Rem     mjungerm   07/08/13 - revert addition of CREATE JAVA priv
Rem     jstenois   06/07/13 - 16755045: need to mask SPARE1 from SEG$ sunce exp
Rem                           clients expect ub4 value
Rem     mjangir    05/20/13 - dont export OLAPSYS, FLOWS_FILES, APEX_040200
Rem     mjungerm   05/15/13 - add create java and related privs
Rem     mjungerm   08/15/12 - dont export role DBHADOOP
Rem     mjangir    08/10/12 - dont export ORDDATA
Rem     mjangir    02/02/12 - bug 13482990
Rem     sdball     05/25/12 - Do not export GSM users
Rem     surman     03/27/12 - 13615447: Add SQL patching tags
Rem     jibyun     01/09/12 - Bug 9524209: Add SYS_OP_DV_CHECK to sensitive
Rem                           columns for Database Vault protection
Rem     sanbhara   07/20/11 - Project 24121 - adding DVSYS and DVF to list of
Rem                           schemas to skip for exp/imp.
Rem     aramappa   07/18/11 - Project 31942: Add DBMS_RLS.OLS type to exu9rls
Rem     jibyun     02/28/11 - Project 5687: Do not export SYSBACKUP, SYSDG, and
Rem                           SYSKM
Rem     mjungerm   11/22/10 - dont export OJVMSYS
Rem     tbhukya    19/04/10 - Bug 9595499: Get fragflags for sub partiton 
Rem                           lob columns
Rem     mjangir    11/12/09 - do not export the jobs owns by sys if exporting
Rem                           by other than sys user
Rem     mjangir    10/28/09 - bug 8982033: restrict password access
Rem                           EXP_FULL_DATABASE
Rem     tbhukya    08/25/09 - Bug 8833245: remove deferred storage segment 
Rem                                        check from view exu10tabs
Rem     tbhukya    07/13/09 - Bug 8679246: use to_char for password_date 
Rem                                        in exu8phs
Rem     tbhukya    05/08/09 - Bug 8467693: use col# also
Rem     ebatbout   04/09/09 - bug 8397778: Prefix session_roles with SYS
Rem     adalee     03/06/09 - new cachehint
Rem     mjangir    12/10/08 - bug 7632440: add support for VPD policies with
Rem                           sstatement_type of "INDEX
Rem     mjangir    11/20/08 - bug 7568350: Policy type changed
Rem     tbhukya    10/06/08 - Bug 7422758 : Add imp9synu
Rem     mjangir    07/28/08 - bug 6936881: ORA-01436: CONNECT BY loop 
Rem     msakayed   05/12/08 - Lrg #3390108: fix exu8dir view
Rem     dsemler    02/29/08 - update to exclude APPQOSSYS user
Rem     mjangir    02/04/08 - 6119138: grant to exp_full_db instead of
Rem                           select_catalog_role for exu8phs
Rem     mjangir    09/11/07 - XbranchMerge mjangir_bug-5872788_10.2.0.4 from
Rem                           st_rdbms_10.2
Rem     mjangir    06/07/07 - bug 5872788 operator dependency ordering
Rem     weizhang   03/08/07 - lrg 2884728: support tablespace MAXSIZE
Rem     hosu       02/27/07 - add administer sql management object to
Rem                           exp_full_database and imp_full_database roles 
Rem     kamble     11/02/06 - add IDR_DIR to noexp$
Rem     slynn      10/12/06 - smartfile->securefile
Rem     yhu        09/14/06 - export with system managed statistics
Rem     mhho       09/10/06 - add XS$NULL to be excluded from all views
Rem     kamble     09/07/06 - exu11xml view for getting opqtype$ flags
Rem     kamble     08/10/06 - encrypted tablespace
Rem     ataracha   07/13/06 - add user anonymous to be excluded from all views
Rem     mjangir    07/10/06 - 5176017: Adding ifreepool column in exu9lob view 
Rem     dkapoor    07/03/06 - don't export ORACLE_OCM 
Rem     weizhang   06/06/06 - proj 18567: support LOBRETENTION and MAXSIZE 
Rem     xbarr      06/06/06 - remove DMSYS schema - obsolete in 11g 
Rem     sramakri   05/15/06 - define exu11ind similar to exu9ind
Rem     sramakri   04/12/06 - index changes for mvs 
Rem     wesmith    04/05/06 - add snapshot views for v11 
Rem     kamble     03/13/06 - 4711857: comment$ problem(long column involved)
Rem     dgagne     01/26/06 - add replace for apos in exu10asc view for 
Rem                           columns with apos in them 
Rem     jgalanes   12/20/05 - Add expxsldelim for 4656020
Rem     sdavidso   11/30/05 - Fix 4087161 - MDAPI for nested tables w/XMLtype 
Rem     jgalanes   08/04/05 - Fix 4526056 - exu81ixsp - get compression 
Rem     jgalanes   07/13/05 - 4375555 IOT w/mapping table in TRANSPORTABLE 
Rem                           mode 
Rem     cdilling   05/11/05 - Fix 4347949 - ignore java classes owned by SYS 
Rem     jgalanes   05/09/05 - Fix 4046842 - exclude types not related to 
Rem                           subject table 
Rem     cdilling   05/02/05 - ignore WMSYS 
Rem     kneel      11/11/04 - fix lrg 1795214: unique constraint error on 
Rem                           import 
Rem     jgalanes   10/27/04 - Fix 3906846 - add exu102xtyp view 
Rem     araghava   10/25/04 - 3448802: don't partobj$ to get blocksize in 
Rem                           *_LOBS 
Rem     jgalanes   10/15/04 - 3651756 switch from SELECT_CATALOG_ROLE         
Rem                           to ExP_FULL_DATABASE on exu?lnk   
Rem     jgalanes   09/28/04 - PLSQL_CCFLAGS
Rem     rburns     09/13/04 - check for SYS user 
Rem     jgalanes   08/31/04 - Column encryption 
Rem     jgalanes   07/21/04 - Fix 3047454 TTS with unused ADT columns 
Rem     cdilling   07/01/04 - Do not export EXFSYS schema or HELP table
Rem     jgalanes   06/10/04 - 3617574 add HAKAN factor to exu81tts 
Rem     rvissapr   06/09/04 - proj 5523 dblink pswd encode 
Rem     jgalanes   04/23/04 - Fix 3447083 - IOT degree lost 
Rem     mxiao      03/25/03 - add EXU10SNAP*
Rem     jgalanes   03/05/04 - Adding new views for 3467567 imp_tab_trig & 
Rem                           imp_lob_notnull
Rem     jgalanes   02/25/04 - Fix 2654811 exu81tabs trigflag with row movement 
Rem     bmccarth   02/03/04 - check tables making use of template part. 
Rem     jgalanes   12/18/03 - Fix 2734632 - PRESERVE SPECIFICATION TIMESTAMP
Rem     jgalanes   12/18/03 - Fix 3107208 - replacing missing view 
Rem     jgalanes   01/26/04 - Fix 2539145 EXEMPT ACCESS POLICY - EXPExEMPT 
Rem     hikimura   11/11/03 - 3159568: add type to exu8ref
Rem     jgalanes   11/10/03 - lrg1566954 dataobj# ordering 
Rem     jgalanes   11/06/03 - new views for 3230116 - compression 
Rem     kamble     09/08/03 - 3071475: return attr name if lob is user defined
Rem     hikimura   08/01/03 - 2977202: add view imp9con
Rem     jgalanes   08/20/03 - Fix lrg1336525 - table stats for IOTs 
Rem     clei       07/15/03 - synonym polices no longer attached to base object
Rem     kamble     06/25/03 - 2803911: add view exu8col_tts_unused_col 
Rem     mramache   06/23/03 - sql profiles
Rem     bmccarth   06/27/03 - 10i version of exu9coe that includes column 
Rem                           with default values for object tables
Rem     jgalanes   05/21/03 - PLSQL_COMPILER_FLAGS changes
Rem     cdilling   05/19/03 - Do not export DBSNMP user
Rem     aramarao   04/24/03 - 2900891 fix ora-904 on spolicy exporting from 817
Rem     jgalanes   05/20/03 - create exu10doso for 2946068
Rem     krajaman   05/20/03 - Remove d_owner# from dependency$
Rem     jgalanes   05/02/03 - 2859106 more supplemental log stuff
Rem     jgalanes   04/01/03 - Fix 2869900 by fixing DECODE in imp_lob_info view
Rem     bmccarth   03/18/03 - ignore DMSYS
Rem     bmccarth   03/20/03 - exclude recycle bin object from transportable
Rem                           and domain index secondary object views
Rem     kamble     02/27/03 - imp9tvoid - get latest tvoid
Rem     bmccarth   01/22/03 - binary float/double values incorrect
Rem     wfisher    01/27/03 - Granting RESUMABLE priv to *_FULL_DATABASE roles
Rem     jgalanes   01/29/03 - PL/SQL compiler optimize switch changes
Rem     mxiao      01/13/03 - retrieve COMMENT in exu9snap
Rem     bmccarth   01/13/03 - return opqtype$ out-of-line flag
Rem     atsukerm   12/27/02 - grant profile creation to imp_full_database
Rem     jgalanes   01/03/03 - Fix lrg by adding lob.property to lob_chunksize view
Rem     bmccarth   01/08/03 - exclude 21/22 types from tabxxx views
Rem     cdilling   01/06/03 - Do not export DIP
Rem     jdavison   12/13/02 - Do not export SI_INFORMTN_SCHEMA
Rem     bmccarth   10/29/02 - exclude recycle bin objects
Rem     tkeefe     09/24/02 - Move proxy_data$ and proxy_role_data$ out of
Rem                           bootstrap region
Rem     vkarra     08/08/02 - tablespace groups
Rem     sasriniv   09/05/02 - Fix 2544428
Rem     nireland   09/04/02 - Add select any seq to exp_full_database
Rem     bmccarth   08/20/02 - don't exclude secondary object from exu9ltts
Rem     mxiao      08/07/02 - add new view for 10i mv logs
Rem     twtong     08/22/02 - add alias_txt to exu9snap
Rem     jgalanes   08/08/02 - Fix 2383871 by exporting typeid
Rem     sasriniv   08/01/02 - Fix lrg caused by 2261722
Rem     jgalanes   07/18/02 - Add new view for 2247291 LOB triggers to 
Rem                           get chunk size
Rem     sasriniv   07/03/02 - Fix 2261722
Rem     araghava   05/15/02 - partition #s no longer go from 1->n. don't use
Rem                           predicate part# = 1.
Rem     jgalanes   05/07/02 - Fix bug 2349201.
Rem     bmccarth   04/29/02 - v$compatibility going away
Rem     bmccarth   03/29/02 - remove uid check from exu9xmlst
Rem     jgalanes   04/03/02 - Fix bug 2300104 - support UNDER clause of 
Rem                           CREATE VIEW.
Rem     jgalanes   02/15/02 - Fix 2226749 by improving type ordering.
Rem     emagrath   02/08/02 - Exclude hidden columns for NOT NULL constr.
Rem     jgalanes   01/30/02 - bug 2182686 - use source$ for triggers export.
Rem     bmccarth   01/28/02 - exclude xdb schema, add views to grab xdb info
Rem     emagrath   01/07/02 - Elim. endian REF problem
Rem     jgalanes   12/19/01 - Fix bug 2127010 by ordering types..
Rem     jgalanes   12/10/01 - make imp9tvoid fetch object STATUS.
Rem     bmccarth   12/21/01 - ordered collections
Rem     nireland   11/14/01 - Fix column comment problem. #2106151
Rem     nireland   11/06/01  - Add defsubpcnt to EXU9PDS. #2089034
Rem     celsbern   11/01/01 - adding grant on exu9actionobj.
Rem     bmccarth   10/23/01 - merge error in exu81actionobj
Rem     celsbern   10/19/01  - merge LOG to MAIN
Rem     clei       10/11/01  - 
Rem     prakumar   10/10/01  - 2035111:Add a hint to exu9lbp & exu81lbsp to 
Rem                            improve performance  
Rem     bmccarth   10/17/01  - log branch merge
Rem     dgagne     10/12/01  - add support for table/tablespace compress option
Rem     jgalanes   10/05/01  - implement support for type synonyms.
Rem     prakumar   09/18/01  - add support for grant on java (re)source objects
Rem     clei       08/30/01  - change exu9rls to support VPD policies on
Rem                            synonym
Rem     dgagne     09/12/01  - add support for subpartition templates
Rem     dgagne     08/29/01  - add support for range/list composite partitions
Rem     bmccarth   08/27/01  - typeo in 8lnk view
Rem     bmccarth   08/21/01  - return flags from link table
Rem     emagrath   08/14/01  - Elim. probs with REF and other constraints
Rem     bmccarth   08/02/01  - New view to containing tables with unused 
Rem                            columns
Rem     bmccarth   07/24/01  - log based replication
Rem     pabingha   07/17/01  - add exu9mvlu view
Rem     nireland   07/05/01  - Amend exu9ind to exclude ALL OID PK indices
Rem     druthven   06/29/01  - 1826338 - improve performance of exu81lbspu
Rem     dmwong     05/30/01  - bug1796876 - quotes in FGA predicates.
Rem     dmwong     05/27/01  - bug1802004 - remove trailing spaces in exu9rls.
Rem     pabingha   05/09/01  - add oldest times to CDC MV Log views
Rem     htseng     04/12/01  - eliminate execute twice (remove ;).
Rem     clei       04/16/01  - add static policy
Rem     wfisher    04/18/01  - Relax restrictions on when 'is type of' is
Rem                            generated.
Rem     prakumar   04/03/01 -  Support col NOT NULL constraint for object table
Rem     gclaborn   04/02/01  - Inc. perf. of partitioned lob views: #1712758
Rem     dgagne     04/04/01  - Add import view to get compatibility mode
Rem     nireland   03/14/01  - Fix pre-8.1 trigger export. #1675586
Rem     tkeefe     03/14/01  - Simplify normalization of n-tier schema.
Rem     htseng     03/13/01  - remove an extra line from create/select imp9usr
Rem     somichi    03/05/01  - 1206380: Grant 'analyze any' privilege to
Rem                                     imp_full_database role
Rem     wesmith    03/01/01  - exu8coo: include snapshot hidden column
Rem     htseng     03/01/01  - add new query imp9usr for checking import user.
Rem     abrumm     02/20/01  - external_tab$: store access params as lob
Rem     dgagne     02/26/01  - fix exu9ind for stats on sys gen constraints
Rem     emagrath   02/16/01  - Support Opaque Type LOB storage
Rem     bmccarth   02/15/01  - imp9tvoid needs to use kzsrorol
Rem     bmccarth   02/07/01  - exu8col need coltype
Rem     bmccarth   01/08/01  - type evolution
Rem     emagrath   01/29/01  - Support XMLType CLOB storage
Rem     dmwong     01/28/01  - remove EXEMPT ACCESS POLICY for 8.0
Rem                            compatibility
Rem     prakumar   01/15/01  - Fix for bug 1218370
Rem     wfisher    01/08/01  - Type inheritance.
Rem     wesmith    12/28/00  - code review comments
Rem     dgagne     12/27/00  - change views with connect by for perf. gain
Rem     wesmith    12/13/00  - 9.0 export/import support for MVs
Rem     gmurphy    12/11/00  - Dont export LBACSYS in full export
Rem     jingliu    12/07/00  - add column synnam2 in exu8syn
Rem     abgupta    12/07/00  - disallow export of functional indices created
Rem                            as part of create MV.
Rem     dgagne     12/08/00  - add support for null associations
Rem     arithikr   12/13/00  - 1489592: expect ORA-1921 for
Rem                            imp_,exp_full_database
Rem     dgagne     12/04/00  - update for 9i
Rem     htseng     12/08/00  - Decode AL16UTF16 to UTF8 in exu8cset to fix
Rem                            9idb to 8i.
Rem     emagrath   11/28/00  - Exclude OIDINDEXs from index view
Rem     cku        11/17/00  - PBMJI
Rem     htseng     11/13/00  - add constraint using index support
Rem     dgagne     11/16/00  - remove tab_ovf references
Rem     rburns     11/09/00  - remove & for sqlplus
Rem     slawande   11/09/00  - Add export support for seq# in mvlog.
Rem     emagrath   10/31/00  - Support IOT MAPPING TABLE
Rem     prakumar   10/30/00  - #1421243:Ref column not null constraint was lost
Rem     emagrath   10/20/00  - Provide statistics info for PIOTs
Rem     dgagne     10/18/00  - put exu8dimu back in for 8.1.5 exp
Rem     nshodhan   10/17/00  - filter out oid only snapshot logs for 81views
Rem     jingliu    10/13/00  - code review comment
Rem     wfisher    10/11/00  - NLS_CHAR_LENGTH -> NLS_LENGTH_SEMANTICS
Rem     jingliu    09/29/00  - modify jobq related export view
Rem     bmccarth   09/28/00  - add view for domain index partitions
Rem     jgalanes   09/25/00  - Adding table qualifiers to new MV log views.
Rem     jgalanes   07/06/00  - Adding view for CDC style MV logs
Rem     dgagne     09/29/00  - update exu8ref for ref const on views
Rem     dgagne     09/26/00  - add support for tab_ovf$ to all table views
Rem     prakumar   09/18/00  - Fix view exu81javt to support shortened java obj
Rem     prakumar   09/10/00  - Bug 1347528:fix ts_type in exu8sto view.
Rem     nshodhan   09/06/00  - Add exu9snapl
Rem     wfisher    09/05/00  - Bitmap join indexes
Rem     htseng     08/31/00  - add row level scn support
Rem     htseng     08/24/00  - correct rollback seg bit
Rem     emagrath   07/28/00  - Multi-blocksize support
Rem     dgagne     10/11/00  - add view for obtaining compiler switches
Rem     nireland   07/25/00  - Fix exu81fil. #1244182
Rem     htseng     07/17/00  - undo tablespace support
Rem     bmccarth   07/12/00  - Domain index v2 changes
Rem     dgagne     07/11/00  - Update constraint views to not include tables in
Rem     dmwong     07/10/00  - add support for partitiond fine grained access.
Rem     dgagne     06/26/00  - Add support for 9.0 N-tier authentication
Rem     dgagne     07/18/00  - modify exu81tabs for external tables
Rem     bmccarth   06/22/00  - Change exu9nta for breakup of proxy$ table
Rem     nireland   06/07/00  - Add isonline to exu81sto
Rem     wfisher    06/16/00  - Unicode support
Rem     rmurthy    06/20/00  - change objauth.option column to hold flag bits
Rem     nireland   05/31/00  - Don't export constraints for ORDSYS etc.#1308267
Rem     wfisher    05/24/00  - Use partitioning info for logical tablespace exp
Rem     bmccarth   05/16/00  - bug 1296644 - performance of stored procedure ex
Rem     arithikr   05/10/00  - Bad merge, restore the file
Rem     jdavison   04/25/00  - Adjust creation of exu816ctx view.
Rem     htseng     04/11/00  - need quots for column name in lob clause
Rem     dmwong     08/31/98  - add exu81approle to support application role
Rem     tlee       10/13/98  - support adt attribute column on partition keys
Rem     nireland   03/21/00  - Fix outer join problem with exu8syn
Rem     dgagne     04/06/00  - add support for n-tier 8.1 project
Rem     rvissapr   03/06/00  - add support to create context accessed globally
Rem     dgagne     03/21/00  - update views used to examine indexes with const
Rem     dgagne     02/29/00  - Change exu81nos to export stats with named contr
Rem     emagrath   02/25/00  - Get attributes for LOBs in PIOTs
Rem     bmccarth   01/14/00  - icache: check for icache_imp_plsql
Rem     nireland   01/20/00  - tempflags now obsolete
Rem     wfisher    02/08/00  -  Create mode for logically exporting tablespaces
Rem     nireland   12/22/99  - Fetch index partition base object #
Rem     bmccarth   11/11/99  - incorrect merge- remove outer joints from
Rem                            exu816tgr
Rem     bmccarth   11/01/99  - performance work on exu816tgr
Rem     wfisher    10/21/99  - Don't look at invalid types on scalar nested tab
Rem     bmccarth   10/13/99  - bug 991834 - exu8orfs - remove cdef$ use
Rem     htseng     09/09/99  - fix primary key missing nologging attribute
Rem     cchui      08/18/99  - modify exu8coo to check for RLS hidden col
Rem     wfisher    08/17/99  - Fixing up grant for exu816sqv
Rem     wfisher    08/04/99  - Support sql versioning for snapshots/ update ver
Rem     wfisher    08/09/99  - fixing exu81tts and exu81usci
Rem     nireland   07/28/99  - Need update any table for LOBs. #861310
Rem     thoang     07/22/99  - Not using spare1 and spare2 from col$.
Rem     emagrath   07/08/99  - Support enhanced trigger events
Rem     dmwong     07/06/99  - add view to test for trusted oracle
Rem     mjungerm   06/15/99  - add java shared data object type
Rem     wfisher    06/24/99  - SQL Version support
Rem     cyyip      05/26/99  - remove special character '&'
Rem     wfisher    05/28/99  - Speeding up EXUTTS query
Rem     nvishnub   05/04/99  - Fix bug # 882543 (filter_non_existent_types)
Rem     nireland   04/21/99  - Remove bogus DROP ROLE. #874826
Rem     lbarton    04/26/99  - make export sensitive to COLLSTO COMPATIBILITY
Rem     nvishnub   04/19/99  - Fix views to improve performance.
Rem     nireland   04/09/99  - Cope with large tables. #867018
Rem     nvishnub   03/24/99  - E/I support for fast rebuild of domain indexes.
Rem     wfisher    03/26/99  - Make synonym ordering y2k ready
Rem     wfisher    03/18/99  - Redo view dependency ordering
Rem     wfisher    03/08/99  - TS for IOTS comes from index
Rem     wfisher    02/24/99  - more column statistics
Rem     lbarton    03/12/99  - change exu81javt
Rem     wfisher    02/15/99  - Don't export precomputed statistics when associa
Rem     nvishnub   01/07/99  - Handle indexes due to constraints correctly.
Rem     lbarton    02/22/99  - filter cartridge-owned objects
Rem     nvishnub   02/25/99  - Optimize view exu8dim(u).
Rem     wfisher    01/06/99  - bug 745470: vlen needed for testing overflow
Rem     wfisher    12/21/98  - Support associations
Rem     tlee       12/10/98  - change privilege rewrite to query rewrite
Rem     vkarra     11/19/98  - fix 81ind_base
Rem     masubram   11/17/98  - code review comments
Rem     masubram   10/13/98  - add two columns to exu81srt
Rem     mimoy      11/13/98  - Support NEVER REFRESH for snapshot in exu81snap
Rem     wesmith    11/13/98  - RepAPI export code review fixes
Rem     jingliu    11/12/98  - Fix imp/exp snapshot log related difs
Rem     lbarton    11/09/98  - new priv: administer database trigger
Rem     wfisher    11/04/98  - Add new privs to impexp roles
Rem     wesmith    11/02/98  - Fix view exu81rgsu
Rem     jingliu    10/30/98  - Support snapshot log export for 8.1
Rem     tlee       10/27/98  - get compress option for piot in exu81usci
Rem     wesmith    10/20/98  - Modify view exu81snap to nvl() flavor_id
Rem     wesmith    10/15/98  - Add support for export of RepAPI snapshots
Rem     tlee       10/13/98  - support adt attribute column on partition keys
Rem     avaradar   10/07/98  - get property value in exu8col
Rem     nvishnub   10/20/98  - Enumerate partitioned constraints indices.
Rem     tlee       10/02/98  - get subpart storage for transportable tablespace
Rem     avaradar   09/28/98  - compare intcol# in exu8spok, exu8poki, exu8pok
Rem     wfisher    09/08/98  - Specify default histograms if no histograms exis
Rem     avaradar   09/07/98  - Hidden column support for snapshots
Rem     lbarton    09/09/98  - Filter types owned by cartridges
Rem     tlee       09/01/98  - transportable tablespace with nested table
Rem     nvishnub   08/26/98  - Filter special schema objects.
Rem     tlee       08/25/98  - transportable tablespace with iot
Rem     tlee       08/25/98  - update defbufpool of default level
Rem     whuang     08/19/98  - fake index
Rem     nvishnub   08/05/98  - E/I of primary key refs.
Rem     nvishnub   07/29/98  - Filter datetime interval types.
Rem     nireland   07/28/98  - Correctly identify constraint indices. #686272
Rem     lbarton    08/04/98  - use new dbms_java names
Rem     tlee       07/22/98  - remove ts_type from exupds, update exu8lob
Rem     lbarton    07/13/98  - lrid downgrade support
Rem     nvishnub   07/13/98  - Add tablespace_type to storage info.
Rem     lbarton    06/19/98  - Java longname support
Rem     tlee       06/14/98  - lob and varray as lob partitioned obj support
Rem     tlee       06/10/98  - tspitr support of new partitioning
Rem     amsrivas   06/07/98  - Bug 536970
Rem     gclaborn   06/08/98  - Add system procedural object and action support
Rem     nvishnub   06/05/98  - Put back lob-index storage clause.
Rem     gclaborn   06/04/98  - Separate new export tables
Rem     asurpur    06/03/98  - Adding changes to exu8grs
Rem     asurpur    06/02/98  - Changing view exu8spv to not export some privile
Rem     gclaborn   06/02/98  - Update operator / indextype support
Rem     lbarton    05/26/98  - javasnm$ has changed
Rem     nvishnub   05/20/98  - Fix exu8ink to not to include 0 cols.
Rem     gclaborn   05/08/98  - Add views on exppkgs$ / expdep$: Subset exu8tab
Rem                            and exu8typ from 81 versions; no secondary obj.
Rem     tlee       05/07/98  - fix exu8pds and update tabcompart$ changes
Rem     dmwong     05/07/98  - require select_catalog_role for exu81rls
Rem     nvishnub   05/01/98  - Lob storage for varrays.
Rem     ayalaman   05/01/98  - Key compression : add preccnt to exu81ind
Rem     nvishnub   04/29/98  - Nested table enhancements.
Rem     hasun      04/28/98  - Exclude 8.1 snapshots from V8.0.X export
Rem     wfisher    04/27/98  - Adding support for flags
Rem     nvishnub   04/21/98  - Support for bitmapped tablespaces.
Rem     lbarton    04/16/98  - filter system events from pre8.1 triggers
Rem     wfisher    04/15/98  - Support Dimensions
Rem     dmwong     04/15/98  - add exu81rls for fine grain access control
Rem     smuthuli   04/13/98  - bug 487555.roll forward from 805
Rem     tlee       04/13/98  - rename comppart$->tabcompart$ add indcompart$
Rem     gclaborn   04/07/98  - Fetch implementation type details in exu81doi
Rem     dmwong     04/02/98  - add support for application context
Rem     ayalaman   03/27/98  - use 2 bytes of pctthres for guess quality
Rem     sparrokk   03/18/98  - 621964: EXECUTE ANY TYPE for exp/imp roles
Rem     nvishnub   03/13/98  - Fix view exu8iov to use bitand.
Rem     nvishnub   03/11/98  - E/I of partitioned IOTs.
Rem     wfisher    03/02/98  - Save raw analyze statistics at export
Rem     lbarton    02/23/98  - changes for java
Rem     vkarra     02/12/98  - single table cluster
Rem     tlee       02/09/98  - 81 partitioned object support
Rem     nireland   02/06/98  - SYS_NC_ROWINFO$ is 0x200 in sys.col$. #606078
Rem     nvishnub   12/17/97  - Support for datetime-interval datatypes.
Rem     cfreiwal   02/24/98  - key compression : add preccnt to exu8uscu
Rem     thoang     12/11/97  - Updated views to exclude unused columns
Rem     gclaborn   12/19/97  - Filter 2ndary objects, add oper/indextype sup.
Rem     wfisher    12/02/97  - Merge from wfisher_catexp804 in 8.0.4
Rem     gclaborn   12/02/97  - Add Functional / Domain Index support
Rem     wesmith    11/21/97  - Correct grant of snapshot view
Rem     wesmith    11/20/97  - add 8.1 views to support aggregate snapshots
Rem     mdepledg   10/08/97  - add spare1 to exu8tab
Rem     wfisher    09/19/97  - Bug 547977 -- support parallel for indexes
Rem     bmoy       09/16/97  - fix imp8repcat view.
Rem     wfisher    09/16/97  - Allow export of privs and role grants to public
Rem     wfisher    08/27/97  - fix exu8opt definition
Rem     wfisher    08/26/97  - Add exu8opt
Rem     bmoy       07/03/97  - Fix imp8repcat, add check for user#.
Rem     jpearson   06/20/97  - bug 498610 - view text and trigger action sizes
Rem     jstenois   06/12/97  - distributed security domains in export
Rem     wfisher    06/12/97  - Support trusted links
Rem     jstenois   06/06/97  - recover from V$OPTIONS changes
Rem     rsarwal    05/29/97  - Remove Echo
Rem     gdoherty   05/10/97  - remove blank lines that break sqlplus
Rem     bmoy       05/05/97  - Fix bug 454318.
Rem     jstenois   04/17/97  - support trigger with different owner than table
Rem     bmoy       03/27/97  - Replication support for Imp, added imp8repcat
Rem     jpearson   04/01/97  - fix index on nested_table_id col of inner table
Rem     jpearson   03/11/97  - partitioned cache support
Rem     wfisher    03/25/97  - adding exu8csn and exu8csnu (scalar nested table
Rem     jstenois   03/21/97  - get account status from user$
Rem     jpearson   02/13/97  - fix date specifications
Rem     gdoherty   01/30/97  - Get dataobj# in exu8lob for PITR
Rem     syeung     11/14/96  - Snapshot DDL: grant exu8glob to public
Rem     adowning   10/08/96  - fix snapshot views
Rem     syeung     08/29/96  - snapshot ddl
Rem     wfisher    11/08/96  - exu8tab(u) and exu8cset are used by import too
Rem     wfisher    10/31/96  - SYS_NC_SETID$ -> NESTED_TABLE_ID
Rem     jpearson   10/29/96  - bitmap indexes on inner nested tables
Rem     gdoherty   10/22/96  - add dobjid to exu8tbp and exu8ixp
Rem     jpearson   10/22/96  - export views in dependency order
Rem     syeung     10/07/96  - bug 374657: merge bitmap index fix from 7.3
Rem     syeung     10/03/96  - bump up EXPORT_VIEWS_VERSION for 8.0.2
Rem     syeung     09/25/96  - nchar support
Rem     echong     09/26/96  - modify exu8ink to handle ADTs
Rem     echong     09/17/96  - define exu8ink for iots
Rem     jpearson   09/17/96  - fix exu8tabi modified flag
Rem     jpearson   09/13/96  - fix exu8lob view
Rem     syeung     09/11/96  - password management
Rem     ixhu       07/31/96  - dataobj# and tabno for point-in-time recovery
Rem     jpearson   09/11/96  - modify ref scope handling
Rem     jpearson   08/30/96  - fix column comments on extent tables and views
Rem     jpearson   08/28/96  - fix cache flag in exu8tab and exu8clu
Rem     jpearson   08/21/96  - nested table column names
Rem     asurpur    07/31/96  - Granting *_catalog_roles to *_full_database
Rem     jpearson   08/19/96  - modify nested table support
Rem     wfisher    08/14/96  - LOB clauses on CREATE TABLE for attributes
Rem     jpearson   08/08/96  - support REF SCOPE
Rem     jpearson   08/06/96  - extent views fix for dropped types
Rem     syeung     07/19/96  - purified
Rem     jpearson   07/29/96  - handle INSTEAD OF triggers
Rem     jpearson   07/24/96  - simplify incremental export
Rem     jpearson   07/11/96  - fix merge errors
Rem     syeung     07/01/96  - system generated name changed
Rem     jpearson   07/10/96  - add catalog roles
Rem     syeung     06/24/96  - clu.spare4->avgchn in exu8clu
Rem     syeung     06/19/96  - fix snapshot views
Rem     echong     07/08/96  - define exu8iovu for iots
Rem     echong     06/24/96  - add iot comments
Rem     echong     06/17/96  - add defer to exu8con
Rem     jpearson   06/27/96  - support for librarys and execute any type priv
Rem     wfisher    06/25/96  - Don't get lob descriptions for lob attributes
Rem     jpearson   06/14/96  - change views for indices to support objects
Rem     jpearson   06/13/96  - support constraints on adt columns
Rem     wfisher    06/13/96  - Add SYS_NC_ to system generated column names
Rem     jpearson   06/12/96  - fix type body audit information
Rem     jpearson   06/11/96  - support for objects in incremental export
Rem     jpearson   06/11/96  - fix type body views
Rem     jpearson   06/10/96  - add views for types, librarys and directory alia
Rem     wfisher    06/07/96  - Add in more object views
Rem     wfisher    06/06/96  - Adding object views
Rem     jpearson   06/05/96  - modify exugrn[u] for directorys
Rem     asurpur    05/29/96  - Removing select on private views from select_cat
Rem     wfisher    05/23/96  - Adding object support for columns
Rem     mmonajje   05/22/96  - Replace action col name with action#
Rem     wfisher    05/16/96  - Return property and type information for tables
Rem     echong     05/24/96  - Modify exu8tab to include iots
Rem     syeung     05/16/96  - fix merge problem
Rem     asurpur    05/15/96  - Dictionary Protection: Granting privileges
Rem     syeung     05/14/96  - modified for replication changes
Rem     ixhu       05/13/96  - export v7 tables, clusters, p'd tables in Beta1
Rem     ccchang    05/10/96  - add nologging support
Rem     ixhu       05/08/96  - support ts$ online$ and contents$ changes
Rem     asurpur    04/08/96  - Dictionary Protection Implementation
Rem     ajasuja    05/02/96  - merge OBJ to BIG
Rem     ixhu       04/11/96  - AQ support: new expact$ columns
Rem     syeung     04/24/96  - Add property to exu8uscu
Rem     syeung     04/12/96  - fix header conflict
Rem     ccchang    03/15/96  - Support for PTI
Rem     syeung     04/10/96  - change unique$ to property in exu8ind
Rem     ixhu       04/03/96  - increment export view version number for 8.0
Rem     ixhu       02/28/96  - tablespace point-in-time recovery: exu8tsn
Rem     syeung     02/28/96  - add support deferred constraints and
Rem                            temporary tables
Rem     ixhu       02/26/96  - fix exu8fil view
Rem     ixhu       02/24/96  - fix exu8clu tsno
Rem     atsukerm   02/09/96  - fix file$ references.
Rem     ixhu       01/16/96  - ind$ spare8 to type in exu8ind* for bitmap index
Rem     ixhu       01/03/96  - ts-rel DBA: exu8sto, exu8stou, exu8tne,
Rem                            exu8tab, exu8clu, exu8ind, exu8rsg, exu8uscu,
Rem     achaudhr   10/25/95  - PTI: fix parallel, cache
Rem                          - PTI: global replace {imp, exu}7* -> {imp, exu}8*
Rem     aho        11/13/95  - iot
Rem     achaudhr   10/25/95  - PTI: fix parallel, cache
Rem     achaudhr   08/22/95  - PTI: t$.modified -> t$.flags
Rem     gdoherty   08/31/95  - mergetrans fix_pti_merge_bugs
Rem     achaudhr   07/20/95  - PTI: t.modified -> t.flags
Rem     ccchang    10/10/95  - add bitmap to exu7ind view for bitmap index
Rem     ixhu       09/18/95  - bug 250819 - misspelt RECORD, referential
Rem     ixhu       09/11/95  - bug 110894 - add exu7ordu to speed up exu7vewu
Rem     bhimatsi   07/11/95  - merge changes from branch 1.37.720.2
Rem     ssamu      06/15/95  - change views on tab$
Rem     ixhu       05/25/95  - add content to exu7tbs
Rem     ixhu       05/15/95  - bug 274629 - export ts quota even for dropped ts
Rem     lcprice    05/08/95  - merge changes from branch 1.37.720.1
Rem     ixhu       04/18/95  - add imp7uec for unlimited extent compatibility
Rem     jcchou     04/17/95  - (258186) fix
Rem     ixhu       04/04/95  - temporary/permanent tablespace in exu7tbs
Rem     ixhu       03/09/95  - add segcol# in exu7col & exu7colu, exu7cset
Rem     lcprice    04/18/95  - Fix bug #267737 - default roles processing
Rem     vraghuna   08/19/94  - move views reqd by both imp and exp to the top
Rem     vraghuna   08/18/94  - move compatibility checks from sql.bsq
Rem     vraghuna   08/15/94  - bug 227714 - add exu7cpo
Rem     jloaiza    07/08/94  - bitand modified column
Rem     vraghuna   06/20/94  - add support for hash cluster functions
Rem     vraghuna   06/10/94  - bug 218372 - speed up exu7del
Rem     vraghuna   06/09/94  - bug 219654 - add NVLs for ||l and cache params
Rem     vraghuna   05/16/94  - bug 215597 - change exu7snaplu also
Rem     vraghuna   05/12/94  - bug 215597 - change exu7snapl to exclude slog
Rem     vraghuna   04/24/94  - bug 211989 - add create roles but not drop
Rem     ltung      03/02/94  - merge changes from branch 1.15.710.1
Rem     vraghuna   02/09/94  - add exu7ver for version control
Rem     vraghuna   02/02/94  - bug 190236 - add outer join to exu7ord in exu7ve
Rem     vraghuna   01/17/94  - bug 191751 - add support for deferred RPC/RepCat
Rem     vraghuna   01/12/94  - bug 191750 - add support for refresh groups
Rem     vraghuna   01/11/94  - bug 191749 - add support for job queues exu7jbq
Rem     vraghuna   01/11/94  - bug 193733 - use basename in incr trigger views
Rem     vraghuna   01/11/94  - bug 193732 - fix exu7del for trigs, pkg bodies
Rem     vraghuna   01/10/94  - bug 192781 - add basetable name for trigger view
Rem     vraghuna   12/30/93  - bug 192652 - change MM to MI for exu7spr
Rem     vraghuna   12/21/93  - bug 191879 - grants issued twice
Rem     vraghuna   12/06/93  - bug 186073 - add read only tablespaces
Rem     vraghuna   08/18/93  - bug 174029 - moving role creation to sql.bsq
Rem     vraghuna   07/07/93  - add support for updatable snapshots
Rem     vraghuna   06/17/93  - bug 166480 - add exu7erc for resource costs
Rem     vraghuna   06/17/93  - bug 168261 - imp_full_database needs insert priv
Rem     vraghuna   06/17/93  - bug 166482 - export role passwords
Rem     vraghuna   05/27/93  - bug 166484 - add audt to exu7spr
Rem     ltung      05/16/93  - export parallel/cache parameters
Rem     vraghuna   03/15/93  - bug 140485 - incrementals on tables with constra
Rem     vraghuna   03/12/93  - bug 152906 - add tspname to exu7uscu
Rem     vraghuna   01/27/93  - bug 146283 - add exu7usc
Rem     vraghuna   12/18/92  - bug 143375 - break up exu7col
Rem     vraghuna   12/02/92  - bug 139302 - speed up exu7colnn
Rem     tpystyne   11/07/92  - use create or replace view
Rem     vraghuna   10/28/92  - bug 130560 - add exu7ful
Rem     vraghuna   10/23/92  - bug 135594 - remove exu7inv and exu7invu
Rem     glumpkin   10/20/92  - Renamed from EXPVEW.SQL
Rem     vraghuna   10/14/92  - bug 131957 - add field to exu7sto and exu7stou
Rem     vraghuna   07/14/92  - bug 115048 - support for analyze statement
Rem     cheigham   06/24/92  - add exu7colnn view
Rem     cheigham   06/22/92  - fix cdef$, col$ joins to accommodate changes for
Rem     jbellemo   06/12/92  - add mapping for MLSLABEL
Rem     vraghuna   06/03/92  - bug 39511 - add exu7grs
Rem     cheigham   05/27/92  - speed up exu7vew
Rem     cheigham   02/13/92  - add select any to imp_full_database
Rem     cheigham   02/13/92  - grant alter any table to imp_full_database
Rem     cheigham   01/29/92  - export altered clusters in inc. exports
Rem     cheigham   01/09/92  - add more privs to imp_full_database
Rem     cheigham   11/15/91  - fix object codes
Rem     cheigham   11/06/91  - fix inc. trigger views
Rem     cheigham   11/02/91  - merge in hash changes
Rem     cheigham   10/11/91  - view names: exu -> exu7
Rem     cheigham   09/27/91  - add snapshot views
Rem     sksingh    09/30/91  - merge changes from branch 1.13.50.1
Rem     sksingh    09/23/91  - replace spare1, 2, 3 with match, refact, enabled
Rem     agupta     09/20/91  - add support for lists/groups storage params
Rem     agupta     08/16/91  - enable|disable constraints
Rem     agupta     07/30/91  - 7037 - views not created in dependency or
Rem     agupta     07/02/91  - timestamp syntax for procedures
Rem     agupta     06/21/91  - fix errors in exurlg
Rem     agupta     06/14/91  - user$ column name changes
Rem     agupta     05/31/91  - add userid to tablespace quota view
Rem     agupta     05/04/91  - fix unique constraints bug
Rem     agupta     04/16/91  - fix auditing views
Rem     jwijaya    04/12/91  - remove LINKNAME IS NULL
Rem     rkooi      04/01/91  - add 'o.linkname IS NULL' clause
Rem     Gupta      02/26/90  - Lots of modifications for V7
Rem     Hong       10/31/88  - don't export quotas of 0
Rem     Hong       09/21/88  - allow null precision/scale
Rem     Hong       09/10/88  - fix outer joins
Rem     Hong       08/10/88  - get default/temp tablespace in exuusr
Rem     Hong       07/01/88  - get obj id in some views
Rem     Hong       06/10/88  - remove userid != 0 from views
Rem     Hong       04/28/88  - comment$ moved to com$
Rem     Hong       03/24/88  - add audit field to exu7seq
Rem     Hong       03/07/88  - deal with initrans, maxtrans
Rem                            add views for constraints, sequence #
Rem     Hong       02/01/88  - add exuico and exuicou
Rem                            temporary commented out col$.default$
Rem     Hong       02/01/88  - fix exufil to use v$dbfile directly
Rem     Hong       12/12/87  - fix exutbs
Rem     Hong       12/07/87  - handle min extents
Rem

@@?/rdbms/admin/sqlsessstart.sql

WHENEVER SQLERROR EXIT;          
DOC  
######################################################################  
######################################################################  
    The following PL/SQL block will cause an ORA-20000 error and
    terminate the current SQLPLUS session if the user is not SYS. 
    Disconnect and reconnect with AS SYSDBA.  
######################################################################  
######################################################################  
#  
  
DECLARE 
  p_user VARCHAR2(128); 
BEGIN 
    SELECT USER INTO p_user FROM DUAL;  
    IF p_user != 'SYS' THEN  
        RAISE_APPLICATION_ERROR (-20000,  
           'This script must be run AS SYSDBA');  
    END IF;  
END; 
/ 
WHENEVER SQLERROR CONTINUE;          

REM
REM This role allows the grantee to perform full database exports including
REM incremental exports
REM
REM Expect ORA-1921 for CREATE ROLE exp_full_database if this file is run
REM as part of the migration script and the role existed in the previous
REM release. Dropping will require DBA to regrant the role.
REM
CREATE ROLE exp_full_database;
GRANT SELECT ANY TABLE TO exp_full_database;
GRANT BACKUP ANY TABLE TO exp_full_database;
GRANT EXECUTE ANY PROCEDURE TO exp_full_database;
GRANT EXECUTE ANY TYPE TO exp_full_database;
GRANT SELECT ANY SEQUENCE to exp_full_database;
GRANT RESUMABLE to exp_full_database;
GRANT INSERT, UPDATE, DELETE ON sys.incexp TO exp_full_database;
GRANT INSERT, UPDATE, DELETE ON sys.incvid TO exp_full_database;
GRANT INSERT, UPDATE, DELETE ON sys.incfil TO exp_full_database;
GRANT ADMINISTER SQL MANAGEMENT OBJECT TO exp_full_database;
GRANT exp_full_database TO DBA;

REM
REM This role allows the grantee to perform full database imports
REM
REM Expect ORA-1921 for CREATE ROLE imp_full_database if this file is run
REM as part of the migration script and the role existed in the previous
REM release. Dropping will require DBA to regrant the role.
REM
CREATE ROLE imp_full_database;
GRANT BECOME USER TO imp_full_database;
GRANT CREATE ANY CLUSTER TO imp_full_database;
GRANT CREATE ANY INDEX TO imp_full_database;
GRANT CREATE ANY TABLE TO imp_full_database;
GRANT CREATE ANY PROCEDURE TO imp_full_database;
GRANT CREATE ANY SEQUENCE TO imp_full_database;
GRANT CREATE ANY SNAPSHOT TO imp_full_database;
GRANT CREATE ANY SYNONYM TO imp_full_database;
GRANT CREATE ANY TRIGGER TO imp_full_database;
GRANT CREATE ANY VIEW TO imp_full_database;
GRANT CREATE PROFILE TO imp_full_database;
GRANT CREATE PUBLIC DATABASE LINK TO imp_full_database;
GRANT CREATE DATABASE LINK TO imp_full_database;
GRANT CREATE PUBLIC SYNONYM TO imp_full_database;
GRANT CREATE ROLLBACK SEGMENT TO imp_full_database;
GRANT CREATE ROLE TO imp_full_database;
GRANT CREATE TABLESPACE TO imp_full_database;
GRANT CREATE USER TO imp_full_database;
GRANT AUDIT ANY TO imp_full_database;
GRANT COMMENT ANY TABLE TO imp_full_database;
GRANT ALTER ANY TABLE TO imp_full_database;
GRANT SELECT ANY TABLE TO imp_full_database;
GRANT EXECUTE ANY PROCEDURE TO imp_full_database;
GRANT EXECUTE ANY TYPE TO imp_full_database;
GRANT INSERT ANY TABLE TO imp_full_database;
GRANT UPDATE ANY TABLE TO imp_full_database;
GRANT CREATE ANY DIRECTORY TO imp_full_database;
GRANT CREATE ANY TYPE TO imp_full_database;
GRANT CREATE ANY LIBRARY TO imp_full_database;
GRANT CREATE ANY CONTEXT TO imp_full_database;
GRANT ADMINISTER DATABASE TRIGGER TO imp_full_database;
GRANT CREATE ANY OPERATOR TO imp_full_database;
GRANT CREATE ANY INDEXTYPE TO imp_full_database;
GRANT CREATE ANY DIMENSION TO imp_full_database;
GRANT GLOBAL QUERY REWRITE TO imp_full_database;
GRANT CREATE ANY SQL PROFILE TO imp_full_database;
GRANT ADMINISTER SQL MANAGEMENT OBJECT TO imp_full_database;

REM
REM Privileges needed to execute PL/SQL blocks
REM
REM NOTE:  privileges that need to be granted via packages (e.g.,
REM        MANAGE_ANY_QUEUE) will be granted in the relevant package (e.g.,
REM        catqueue.sql) rather than here.  These privileges are identified in
REM        the SYSTEM_PRIVILEGE_MAP with PROPERTY!= 0
REM
GRANT DROP ANY OUTLINE TO imp_full_database;

REM
REM Granting the roles access views/packages from the dictionary;
REM
GRANT SELECT_CATALOG_ROLE TO exp_full_database;
GRANT SELECT_CATALOG_ROLE TO imp_full_database;
GRANT EXECUTE_CATALOG_ROLE TO imp_full_database;
GRANT EXECUTE_CATALOG_ROLE TO exp_full_database;

REM
REM For import of incremental export files
REM
GRANT DROP ANY CLUSTER TO imp_full_database;
GRANT DROP ANY INDEX TO imp_full_database;
GRANT DROP ANY TABLE TO imp_full_database;
GRANT DROP ANY PROCEDURE TO imp_full_database;
GRANT DROP ANY SEQUENCE TO imp_full_database;
GRANT DROP ANY SNAPSHOT TO imp_full_database;
GRANT DROP ANY SYNONYM TO imp_full_database;
GRANT DROP ANY TRIGGER TO imp_full_database;
GRANT DROP ANY VIEW TO imp_full_database;
GRANT DROP PROFILE TO imp_full_database;
GRANT DROP PUBLIC DATABASE LINK TO imp_full_database;
GRANT DROP PUBLIC SYNONYM TO imp_full_database;
GRANT DROP ROLLBACK SEGMENT TO imp_full_database;
GRANT DROP ANY ROLE TO imp_full_database;
GRANT DROP TABLESPACE TO imp_full_database;
GRANT DROP USER TO imp_full_database;
GRANT DROP ANY DIRECTORY TO imp_full_database;
GRANT ALTER ANY TYPE TO imp_full_database;
GRANT DROP ANY TYPE TO imp_full_database;
GRANT DROP ANY LIBRARY TO imp_full_database;
GRANT DROP ANY CONTEXT TO imp_full_database;
GRANT ALTER ANY PROCEDURE TO  imp_full_database;
GRANT ALTER ANY TRIGGER TO  imp_full_database;
GRANT DROP ANY OPERATOR TO imp_full_database;
GRANT DROP ANY INDEXTYPE TO imp_full_database;
GRANT DROP ANY DIMENSION TO imp_full_database;
GRANT ANALYZE ANY TO imp_full_database;
GRANT RESUMABLE TO imp_full_database;
GRANT DROP ANY SQL PROFILE TO imp_full_database;

GRANT imp_full_database TO DBA;

REM **********  I M P O R T A N T  **********  I M P O R T A N T  **********
REM This first view selects all rows from sys.obj$ that are NOT secondary
REM objects as created by Domain Indexes. Secondary objects are not normally
REM exported because the domain index's CREATE INDEX at import time will create
REM them. However, when doing domain index 'fast rebuild' we do place certain
REM classes of secondary objects (tables & their types, indexes) in the
REM export file.
REM
REM exu81obj should be used as a substitute for obj$ in all top level views
REM of object classes whose secondary objects will NEVER be exported; i.e, are
REM not exported during DI 'fast rebuild'.  Those object classes that can be
REM exp. in DI fast rebuild (tables/indexes) should continue to use obj$ and
REM filtering (or not) of 2ndary objects will be done at run time via a bind
REM var. on the WHERE clauses of the appropriate SELECT statements in exuiss.c.
REM
REM When and if Pt. In Time Recovery ever supports domain indexes, it will have
REM to allow export of secondary objects because these comprise the storage for
REM the index. At that time, all object classes that PITR exports will have to
REM switch from using exu81obj (static filtering) back to obj$ and dynamically
REM filter off secondary objects as appropriate.
REM **********  I M P O R T A N T  **********  I M P O R T A N T  **********

CREATE OR REPLACE VIEW exu81obj AS
        SELECT  o$.*
        FROM    sys.obj$ o$, sys.user$ u$
        WHERE   BITAND(o$.flags, 16) != 16 AND
                /* Ignore recycle bin objects */
                BITAND(o$.flags, 128) != 128 AND 
                o$.owner# = u$.user# AND
                u$.name NOT IN ('ORDSYS',  'MDSYS', 'CTXSYS', 'ORDPLUGINS',
                                'LBACSYS', 'XDB',   'SI_INFORMTN_SCHEMA',
                                'DIP', 'DBSNMP', 'EXFSYS', 'WMSYS','ORACLE_OCM',
                                'ANONYMOUS', 'XS$NULL', 'APPQOSSYS', 'OJVMSYS',
                                'SYSBACKUP', 'SYSDG', 'SYSRAC', 'SYSKM', 'DVSYS', 'DVF',
                                'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                                'ORDDATA', 'LOGSTDBY_ADMINISTRATOR','OLAPSYS',
                                'FLOWS_FILES','APEX_040200','APEX_050000','GGSYS')
/
GRANT SELECT ON sys.exu81obj TO SELECT_CATALOG_ROLE;

REM
REM Get SQL Version information -- this version needs to be hardcoded as 8.1.6
REM when new versions of sql are generated.
REM
CREATE OR REPLACE VIEW exu816maxsqv (
                version#, sql_version) AS
        SELECT  sv.version#, sv.sql_version
        FROM    sys.sql_version$ sv
        WHERE   sv.version# = (
                    SELECT  MAX(sv2.version#)
                    FROM    sys.sql_version$ sv2)
/
GRANT READ ON sys.exu816maxsqv TO PUBLIC;

REM
REM The following helper view identifies interesting older sql versions in
REM the database. Only sql versions other than the database sql version are
REM identified.  Versions later than the export view's version are down-graded
REM to the version of the export views being used.
REM
CREATE OR REPLACE VIEW exu816sqv AS
        SELECT  sv.*
        FROM    sys.sql_version$ sv
        WHERE   sv.version# < (
                    SELECT  m.version#
                    FROM    sys.exu816maxsqv m)
/
GRANT SELECT ON sys.exu816sqv TO SELECT_CATALOG_ROLE;

REM
REM ***************************************************
REM Section 1: Views required by BOTH export and import
REM ***************************************************
REM

REM
REM 'Database' (SYSTEM tablespace) block size - used only in pre 9.0 Exports
REM for db blocksize and Imports that need to support V5 CREATE/ALTER SPACE
REM
CREATE OR REPLACE VIEW exu8bsz (
                blocksize) AS
        SELECT  ts$.blocksize
        FROM    sys.ts$ ts$
/
GRANT READ ON sys.exu8bsz TO PUBLIC;

REM
REM all users
REM
CREATE OR REPLACE VIEW exu8usr (
                name, userid, passwd, defrole, datats, tempts, profile#,
                profname, astatus, ext_username) AS
        SELECT  u.name, u.user#, DECODE(u.password, 'N', '', u.password),
                DECODE(u.defrole, 0, 'N', 1, 'A', 2, 'L', 3, 'E', 'X'),
                ts1.name, DECODE(BITAND(ts2.flags,2048),2048,'SYSTEM',ts2.name),
                u.resource$, p.name, u.astatus,
                u.ext_username
        FROM    sys.user$ u, sys.ts$ ts1, sys.ts$ ts2, sys.profname$ p
        WHERE   u.datats# = ts1.ts# AND
                u.tempts# = ts2.ts# AND
                u.type# = 1 AND
                u.resource$ = p.profile# AND
                u.name NOT IN ( 'ORDSYS',  'MDSYS', 'CTXSYS', 'ORDPLUGINS',
                                'LBACSYS', 'XDB',   'SI_INFORMTN_SCHEMA',
                                'DIP',  'DBSNMP', 'EXFSYS', 'WMSYS',
                                'ORACLE_OCM', 'ANONYMOUS', 'XS$NULL',
                                'APPQOSSYS', 'OJVMSYS', 'SYSBACKUP', 'SYSDG', 
                                'SYSRAC', 'SYSKM', 'DVSYS', 'DVF', 'ORDDATA',
                                'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                                'LOGSTDBY_ADMINISTRATOR','OLAPSYS',
                                'FLOWS_FILES','APEX_040200','APEX_050000','GGSYS')
/
GRANT SELECT ON sys.exu8usr TO SELECT_CATALOG_ROLE;

REM
REM current user
REM
CREATE OR REPLACE VIEW exu8usru AS
        SELECT  *
        FROM    sys.exu8usr
        WHERE   userid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8usru TO PUBLIC;

REM
REM check if user has priv to do a full db export
REM
CREATE OR REPLACE VIEW exu8ful(
                role) AS
        SELECT  u.name
        FROM    sys.x$kzsro, sys.user$ u
        WHERE   kzsrorol != userenv('SCHEMAID') AND
                kzsrorol != 1 AND
                u.user# = kzsrorol
/
GRANT READ ON sys.exu8ful TO PUBLIC;

REM ---------------------------------------------------------------------
REM                        General and User Table Views
REM ---------------------------------------------------------------------
REM
REM  Notes:
REM      The 'latest' release view will return all supportable 
REM      tables while views used by prior releases should exclude 
REM      (if at all possible) tables which contain items 
REM      (such as data types) that are not supported on the specific 
REM      version's platform.  
REM
REM ---------------------------------------------------------------------

REM
REM V10.0 Table view
REM
REM Notes: 
REM    Includes tables with columns we don't deal with so we can 
REM    produce a better error to the 10i user.
REM
REM  xdbool added for 10i and out-of-line ordering
REM
CREATE OR REPLACE VIEW exu10tabs (
                objid, dobjid, name, owner, ownerid, tablespace, tsno, fileno,
                blockno, audit$, comment$, clusterflag, mtime, modified, tabno,
                pctfree$, pctused$, initrans, maxtrans, degree, instances,
                cache, tempflags, property, deflog, tsdeflog, roid, recpblk,
                secondaryobj, rowcnt, blkcnt, avgrlen, tflags, trigflag,
                objstatus, xdbool)
      AS                                                      /* Heap tables */
        SELECT
                o$.obj#, o$.dataobj#, o$.name, u$.name, o$.owner#, ts$.name,
                t$.ts#, t$.file#, t$.block#, t$.audit$, c$.comment$,
                NVL(t$.bobj#, 0), o$.mtime,
                DECODE(BITAND(t$.flags, 1), 1, 1, 0), NVL(t$.tab#, 0),
                MOD(t$.pctfree$, 100), t$.pctused$, t$.initrans, t$.maxtrans,
                NVL(t$.degree, 1), NVL(t$.instances, 1),
                DECODE(BITAND(t$.flags, 8), 8, 1, 0),
                MOD(TRUNC(o$.flags / 2), 2), t$.property,
                DECODE(BITAND(t$.flags, 32), 32, 1, 0), ts$.dflogging, o$.oid$,
                t$.spare1, DECODE(BITAND(o$.flags, 16), 16, 1, 0),
                NVL(t$.rowcnt, -1), NVL(t$.blkcnt, -1), NVL(t$.avgrln, -1),
                t$.flags, t$.trigflag, o$.status, 
                (SELECT COUNT(*) 
                    FROM sys.opqtype$ opq$ 
                    WHERE opq$.obj# = o$.obj# AND
                          BITAND(opq$.flags, 32) = 32 )
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$, sys.user$ u$,
                sys.com$ c$
        WHERE   t$.obj# = o$.obj# AND
                t$.ts# = ts$.ts# AND
                u$.user# = o$.owner# AND
                o$.obj# = c$.obj#(+) AND
                c$.col#(+) IS NULL AND
                BITAND(o$.flags,128) != 128 AND      /* Skip recycle bin */
                BITAND(t$.property, 64+512) = 0 AND /*skip IOT and ovflw segs*/
                BITAND(t$.flags, 536870912) = 0    /* skip IOT mapping table */
      UNION ALL                                         /* Index-only tables */
        SELECT  o$.obj#, o$.dataobj#, o$.name, u$.name, o$.owner#, ts$.name,
                i$.ts#, t$.file#, t$.block#, t$.audit$, c$.comment$,
                NVL(t$.bobj#, 0), o$.mtime,
                DECODE(BITAND(t$.flags, 1), 1, 1, 0),
                NVL(t$.tab#, 0), 0, 0, 0, 0, 
                NVL(t$.degree, 1), NVL(t$.instances, 1),
                DECODE(BITAND(t$.flags, 8), 8, 1, 0),
                MOD(TRUNC(o$.flags / 2), 2), t$.property,
                DECODE(BITAND(t$.flags, 32), 32, 1, 0), ts$.dflogging, o$.oid$,
                t$.spare1, DECODE(BITAND(o$.flags, 16), 16, 1, 0), 
                NVL(t$.rowcnt, -1), NVL(t$.blkcnt, -1), NVL(t$.avgrln, -1),
                t$.flags, t$.trigflag, o$.status,
                (SELECT COUNT(*) 
                    FROM sys.opqtype$ opq$ 
                    WHERE opq$.obj# = o$.obj# AND
                          BITAND(opq$.flags, 32) = 32 )
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$, sys.user$ u$,
                sys.com$ c$, sys.ind$ i$
        WHERE   t$.obj# = o$.obj# AND
                u$.user# = o$.owner# AND
                o$.obj# = c$.obj#(+) AND
                c$.col#(+) IS NULL AND
                BITAND(o$.flags,128) != 128 AND      /* Skip recycle bin */
                BITAND(t$.property, 64+512) = 64 AND /* IOT, but not overflow*/
                t$.pctused$ = i$.obj# AND/* For IOTs, pctused has index obj# */
                i$.ts# = ts$.ts#
/
GRANT SELECT ON sys.exu10tabs TO SELECT_CATALOG_ROLE;

REM
REM V10.0 Table views
REM

REM
REM V10.0 current user's tables
REM
CREATE OR REPLACE VIEW exu10tabsu AS
        SELECT  *
        FROM    sys.exu10tabs
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu10tabsu TO PUBLIC;

REM
REM exu10tab
REM
REM Notes: filtered for secondaryobjs from above
REM
CREATE OR REPLACE VIEW exu10tab AS
        SELECT  *
        FROM    sys.exu10tabs t$ 
        WHERE   t$.secondaryobj = 0 
/
GRANT SELECT ON sys.exu10tab TO SELECT_CATALOG_ROLE;

REM
REM current user's tables
REM
CREATE OR REPLACE VIEW exu10tabu AS
        SELECT  *
        FROM    sys.exu10tab
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu10tabu TO PUBLIC;

REM
REM End V10.0 Table views 
REM

REM
REM V9.0 Table views
REM
REM Notes: 
REM    Exclude tables with:
REM        columns of type BINARY_FLOAT (100) or BINARY_DOUBLE (101)
REM
CREATE OR REPLACE VIEW exu9tabs AS
        SELECT  * 
        FROM    sys.exu10tabs 
        WHERE  NOT EXISTS ( 
                   SELECT * 
                   FROM   sys.col$ c$ 
                   WHERE  (c$.obj# = objid AND
                           (c$.type# = 100 OR
                           c$.type# = 101 )))
/
GRANT SELECT ON sys.exu9tabs TO SELECT_CATALOG_ROLE;

REM
REM V9.0 current user's tables
REM
CREATE OR REPLACE VIEW exu9tabsu AS
        SELECT  *
        FROM    sys.exu9tabs
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9tabsu TO PUBLIC;

REM
REM exu9tab
REM
REM Notes: filtered for secondaryobjs from above
REM
CREATE OR REPLACE VIEW exu9tab AS
        SELECT  *
        FROM    sys.exu9tabs t$ 
        WHERE   t$.secondaryobj = 0 
/
GRANT SELECT ON sys.exu9tab TO SELECT_CATALOG_ROLE;

REM
REM current user's tables
REM
CREATE OR REPLACE VIEW exu9tabu AS
        SELECT  *
        FROM    sys.exu9tab
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9tabu TO PUBLIC;

REM
REM List of all tables with unused columns - taken directly from 
REM catalog.sql's all_unused_col_tabs
REM Notes:
REM    Modifications to this view to filter out specific new datatypes
REM    are not required.
REM
CREATE OR REPLACE VIEW exu9tab_unused_cols ( 
                OBJID ) AS
        SELECT  o.obj# 
        FROM    sys.user$ u, sys.obj$ o, sys.col$ c
        WHERE   o.owner# = u.user#
           AND  o.obj# = c.obj#
           AND BITAND(c.property,32768) = 32768            -- is unused column
           AND BITAND(c.property, 1) != 1              -- not ADT attribute col
           AND BITAND(c.property, 1024) != 1024         -- not NTAB's setid col
           AND (o.owner# = userenv('SCHEMAID')
                OR o.obj# IN
                   (SELECT oa.obj#
                     FROM sys.objauth$ oa
                     WHERE grantee# IN ( select kzsrorol
                                 FROM x$kzsro
                               )
                    )
                OR EXISTS (SELECT NULL FROM v$enabledprivs
                            WHERE priv_number IN (-45 /* LOCK ANY TABLE */,
                                                  -47 /* SELECT ANY TABLE */,
                                                  -397/* READ ANY TABLE */,
                                                  -48 /* INSERT ANY TABLE */,
                                                  -49 /* UPDATE ANY TABLE */,
                                                  -50 /* DELETE ANY TABLE */)
                          )
                )
/
GRANT READ ON sys.exu9tab_unused_cols to PUBLIC;

REM
REM V8.1 table views
REM
REM Notes: - exu81tabs is subseted off exu9tabs to filter out tables with
REM          non-null values in trigflag<30:5>
REM        - tempflags is now deprecated
REM
REM 2654811 row_movement_enabled (2097152) flag added in 9.2
REM          2097152 + 31 = 2097183
CREATE OR REPLACE VIEW exu81tabs AS
        SELECT  *
        FROM    sys.exu9tabs
        WHERE   BITAND(trigflag, 2097183) = trigflag
/
GRANT SELECT ON sys.exu81tabs TO SELECT_CATALOG_ROLE;

REM
REM current user's tables
REM
CREATE OR REPLACE VIEW exu81tabsu AS
        SELECT  *
        FROM    sys.exu81tabs
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81tabsu TO PUBLIC;

REM
REM exu81tab
REM
REM Notes: filtered for secondaryobjs from above
REM
CREATE OR REPLACE VIEW exu81tab AS
        SELECT  *
        FROM    sys.exu81tabs
        WHERE   secondaryobj = 0 AND
                ( NOT EXISTS (
                         SELECT  *
                         FROM    sys.col$ c$, sys.coltype$ ct$, sys.type$ t$
                         WHERE   c$.obj# = objid AND
                                 ct$.toid = t$.toid AND
                                 c$.obj# = ct$.obj# AND
                                 c$.col# = ct$.col# AND
                                 ((BITAND(t$.PROPERTIES, 8) = 8) OR
                                 (BITAND(t$.PROPERTIES, 8192) = 8192)))) 
/
GRANT SELECT ON sys.exu81tab TO SELECT_CATALOG_ROLE;

REM
REM current user's tables
REM
CREATE OR REPLACE VIEW exu81tabu AS
        SELECT  *
        FROM    sys.exu81tab
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81tabu TO PUBLIC;

REM
REM V8.0 table view
REM
REM Notes: exu8tab is subseted off exu81tab to filter out tables with:
REM        columns of type UROWID (208)
REM        datetime interval types : (178 <= type <= 183)
REM        varying width character LOBs :
REM        - (type = 112 & ((800 < charsetid < 1000) or (charsetid > 2000)))
REM
CREATE OR REPLACE VIEW exu8tab AS
        SELECT  *
        FROM    sys.exu81tab
        WHERE   NOT EXISTS (
                    SELECT  *
                    FROM    sys.col$ c$
                    WHERE   c$.obj# = objid AND
                            (c$.type# = 208 OR
                             (c$.type# >= 178 AND
                              c$.type# <= 183) OR
                             (c$.type# = 112 AND
                              ((c$.charsetid > 800 AND
                                c$.charsetid < 1000) OR
                               c$.charsetid > 2000))))
/
GRANT SELECT ON sys.exu8tab TO SELECT_CATALOG_ROLE;

REM
REM V8.0 User's tables
REM
CREATE OR REPLACE VIEW exu8tabu AS
        SELECT  *
        FROM    sys.exu8tab
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8tabu TO PUBLIC;

REM
REM Database Character Set and NCHAR Character Set
REM
REM Notes: For import and old versions of export
REM
CREATE OR REPLACE VIEW exu8cset (
                name, value) AS
        SELECT  name, DECODE (value$,'AL16UTF16','UTF8', value$)
        FROM    sys.props$
        WHERE   name IN ('NLS_CHARACTERSET',
                         'NLS_NCHAR_CHARACTERSET')
/
GRANT READ ON sys.exu8cset TO PUBLIC;

REM
REM Database NLS settings
REM
REM Notes: for current version of export
REM
CREATE OR REPLACE VIEW exu9nls (
                name, value) AS
        SELECT  name, value$
        FROM    sys.props$
        WHERE   name IN ('NLS_CHARACTERSET',
                         'NLS_NCHAR_CHARACTERSET',
                         'NLS_LENGTH_SEMANTICS')
/
GRANT READ ON sys.exu9nls TO PUBLIC;

REM
REM Check for Database Options
REM
CREATE OR REPLACE VIEW exu8opt (
                parameter, value) AS
        SELECT  parameter, DECODE(value, 'TRUE', 1, 'FALSE', 0, 2)
        FROM    sys.v$option
/
GRANT READ ON sys.exu8opt TO PUBLIC;

REM
REM ****************************************
REM Section 2: Views required by import ONLY
REM ****************************************
REM

REM
REM build replication procedures view
REM
CREATE OR REPLACE VIEW imp8repcat (
                name, type) AS
        SELECT  name, type#
        FROM    sys.obj$
        WHERE   name IN ('DBMS_SNAPSHOT_UTL', 'DBMS_REPCAT_MIG') AND
                type# = 11 AND
                owner# = 0
/
GRANT READ ON sys.imp8repcat TO PUBLIC;

REM
REM Get Unlimited Extent Compatibility Information
REM
REM 8.0.6 import references this view which never returned any rows
REM so WHERE 1=0 will make sure that continues.
REM
CREATE OR REPLACE VIEW imp8uec (
                release) AS
        SELECT  * 
        FROM    DUAL
        WHERE   1=0
/
GRANT READ ON sys.imp8uec TO PUBLIC;

REM
REM obtain the TOID of an existing type
REM
CREATE OR REPLACE VIEW imp8ttd (
                tname, towner, toid) AS
        SELECT  o$.name, u$.name, o$.oid$
        FROM    sys.obj$ o$, sys.user$ u$, sys.type$ t$
        WHERE   o$.type# = 13 AND
                o$.owner# = u$.user# AND
                o$.oid$   = t$.toid  AND
                t$.toid   = t$.tvoid                          /* Only latest */
/
GRANT SELECT ON sys.imp8ttd TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW imp8ttdu (
                tname, towner, toid) AS
        SELECT  o$.name, u$.name, o$.oid$
        FROM    sys.obj$ o$, sys.user$ u$, sys.type$ t$
        WHERE   o$.type# = 13 AND
                o$.owner# = u$.user# AND
                o$.oid$   = t$.toid  AND
                t$.toid  = t$.tvoid AND                  /* Only the latest */
                (o$.owner# = userenv('SCHEMAID') OR      /* owned by current user */
                /* current user or public role have execute access to type */
                 o$.obj# IN (
                    SELECT  oa.obj#
                    FROM    sys.objauth$ oa
                    WHERE   oa.obj# = o$.obj# AND
                            oa.privilege# = 12 AND                /* execute */
                            oa.grantee# IN (userenv('SCHEMAID'), 1)) OR
                 /* current user or public role can execute any type */
                 EXISTS (
                    SELECT  NULL
                    FROM    sys.sysauth$ sa
                    WHERE   sa.grantee# IN (userenv('SCHEMAID'), 1) AND
                            sa.privilege# = -184))
/
GRANT READ ON sys.imp8ttdu TO PUBLIC;

CREATE OR REPLACE VIEW imp8cdt (
                ownerid, bad) AS
        SELECT  co$.owner#, DECODE(BITAND(c$.defer, 16), 16, 1, 0)
        FROM    sys.cdef$ c$, sys.con$ co$
        WHERE   c$.defer IS NOT NULL AND
                BITAND(c$.defer, 16) = 16 AND
                c$.con# = co$.con#
/
GRANT SELECT ON sys.imp8cdt TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW imp8cdtu  AS
        SELECT  *
        FROM    sys.imp8cdt
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.imp8cdtu TO PUBLIC;

CREATE OR REPLACE VIEW imp8con (
                ctname, tbname, username, intcol) AS
        SELECT  c.name, o.name, u.name, cc.intcol#
        FROM    sys.obj$ o, sys.user$ u, sys.con$ c, sys.ccol$ cc,
                sys.cdef$ cd
        WHERE   o.obj# = cc.obj# AND
                c.con# = cc.con# AND
                o.obj# = cd.obj# AND
                u.user# = c.owner# AND
                cd.con# = c.con# AND
                cd.type# = 3 AND
                BITAND(cd.defer, 8) = 8
/
GRANT SELECT ON sys.imp8con TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW imp9con (
                ctname, tbname, username, intcol, colno, type) AS
        SELECT  c.name, o.name, u.name, cc.intcol#, cc.col#, cd.type#
        FROM    sys.obj$ o, sys.user$ u, sys.con$ c, sys.ccol$ cc,
                sys.cdef$ cd
        WHERE   o.obj# = cc.obj# AND
                c.con# = cc.con# AND
                o.obj# = cd.obj# AND
                u.user# = c.owner# AND
                cd.con# = c.con# AND
                BITAND(cd.defer, 8) = 8
/
GRANT SELECT ON sys.imp9con TO SELECT_CATALOG_ROLE;

REM
REM obtain the tvoid/hash of an existing type ("only latest" check is not
REM required here)
REM
CREATE OR REPLACE VIEW imp9tvoid (
                tname, towner, hash, tvoid, status, typeid, roottoid) AS
        SELECT  o$.name, u$.name, t$.hashcode, t$.tvoid, o$.status, t$.typeid,
                t$.roottoid
        FROM    sys.obj$ o$, sys.user$ u$, sys.type$ t$
        WHERE   o$.type# = 13 AND
                o$.owner# = u$.user# AND
                t$.toid   = o$.oid$ AND
                t$.toid   = t$.tvoid AND                  /* only the latest */
                (userenv('SCHEMAID')  IN (o$.owner#, 0) OR/* System or owner */
                   EXISTS (                          /* user has select role */
                     SELECT  role
                     FROM    sys.session_roles
                     WHERE   role = 'SELECT_CATALOG_ROLE') OR
                  (o$.obj# IN                       /* user has execute priv */
                   (SELECT oa$.obj#
                    FROM   sys.objauth$ oa$
                    WHERE o$.obj# = oa$.obj# AND
                          oa$.grantee# IN  /* granted to current user/public */
                                (SELECT kzsrorol from x$kzsro)  AND
                          privilege# = 12)))                 /* Execute priv */
/
GRANT READ ON sys.imp9tvoid TO PUBLIC;


REM
REM all users for IMPORT
REM
CREATE OR REPLACE VIEW imp9usr (name, userid) AS
        SELECT  u.name, u.user#
        FROM    sys.user$ u
        WHERE   u.user# = userenv('SCHEMAID')
/
GRANT READ ON sys.imp9usr TO PUBLIC;

REM
REM View to get compatible parameter of target database.
REM
CREATE OR REPLACE VIEW imp9compat (compatible) AS
        SELECT  value
        FROM    v$parameter
        WHERE   name = 'compatible'
/
GRANT READ ON sys.imp9compat TO PUBLIC;

REM
REM View to get SYNONYMs for TYPEs.
REM This view is used by import in order to verify that a pre-existing
REM object is a SYNonym for (4) a TYPe.
REM
CREATE OR REPLACE VIEW sys.imp9syn4 (
                synname, synowner, typename, typeowner) AS
        SELECT  o.name, u.name, s.name, s.owner
        FROM    sys.obj$ o, sys.user$ u, sys.syn$ s
        WHERE   s.obj# = o.obj# AND
                u.user# = o.owner# AND
                /* user is sys, or owner, or synonym is PUBLIC */
                (userenv('SCHEMAID') IN (o.owner#, 0) OR o.owner# = 1 OR 
                   EXISTS (                         /* user has select role */
                     SELECT  role
                     FROM    sys.session_roles
                     WHERE   role = 'SELECT_CATALOG_ROLE')) AND
                EXISTS (
                  SELECT ot.obj#
                  FROM sys.obj$ ot
                  WHERE ot.name = s.name AND
                        ot.type# = 13 AND
                        ot.owner# = (
                            SELECT ut.user#
                            FROM sys.user$ ut
                            WHERE ut.name = s.owner))
/
GRANT READ ON sys.imp9syn4 TO PUBLIC;

REM
REM View to get the CHUNK size and Endian for a LOB column.
REM This view is used to get the CHUNK size and Endian property bit of an 
REM existing LOB column in a table 
REM (table may have been pre-created or different than Export size).
REM
create or replace view sys.imp_lob_info
    (OWNER, TABLE_NAME, COLUMN_NAME, CHUNK, LITTLE_ENDIAN)
as
select u.name, o.name, c.name, l.chunk * ts.blocksize, 
        DECODE(BITAND(l.property, 512), 512, 1, 0)
from sys.obj$ o, sys.col$ c, sys.tab$ ta, sys.lob$ l, sys.user$ u, sys.ts$ ts
where o.owner# = u.user#
  and o.obj# = c.obj#
  and c.obj# = l.obj#
  and c.intcol# = l.intcol#
  and l.ts# = ts.ts#(+)
  and (o.owner# = userenv('SCHEMAID')
       or o.obj# in
            (select oa.obj#
             from sys.objauth$ oa
             where grantee# in ( select kzsrorol
                                 from x$kzsro
                               )
            )
       or exists (select null from v$enabledprivs
                  where priv_number in (-45 /* LOCK ANY TABLE */,
                                        -47 /* SELECT ANY TABLE */,
                                        -397/* READ ANY TABLE */,
                                        -48 /* INSERT ANY TABLE */,
                                        -49 /* UPDATE ANY TABLE */,
                                        -50 /* DELETE ANY TABLE */)
                 )
      )
  and o.obj# = ta.obj#
  and bitand(ta.property, 32) != 32    /* not partitioned table */
union all
select u.name, o.name, c.name, 
       plob.defchunk * NVL(ts1.blocksize, NVL(
        (select ts2.blocksize
        from   sys.ts$ ts2, sys.lobfrag$ lf
        where  l.lobj# = lf.parentobj# and
               lf.ts# = ts2.ts# and rownum < 2),
        (select ts2.blocksize
        from   sys.ts$ ts2, sys.lobcomppart$ lcp, sys.lobfrag$ lf
        where  l.lobj# = lcp.lobj# and lcp.partobj# = lf.parentobj# and
               lf.ts# = ts2.ts# and rownum < 2))),
        DECODE(BITAND(l.property, 512), 512, 1, 0)
from sys.obj$ o, sys.col$ c, sys.partlob$ plob,
     sys.lob$ l, sys.ts$ ts1, sys.tab$ ta,
     sys.user$ u
where o.owner# = u.user#
  and o.obj# = c.obj#
  and c.obj# = l.obj#
  and c.intcol# = l.intcol#
  and l.lobj# = plob.lobj#
  and plob.defts# = ts1.ts# (+)
  and bitand(c.property,32768) != 32768           /* not unused column */
  and (o.owner# = userenv('SCHEMAID')
       or o.obj# in
            (select oa.obj#
             from sys.objauth$ oa
             where grantee# in ( select kzsrorol
                                 from x$kzsro
                               )
            )
       or exists (select null from v$enabledprivs
                  where priv_number in (-45 /* LOCK ANY TABLE */,
                                        -47 /* SELECT ANY TABLE */,
                                        -397/* READ ANY TABLE */,
                                        -48 /* INSERT ANY TABLE */,
                                        -49 /* UPDATE ANY TABLE */,
                                        -50 /* DELETE ANY TABLE */)
                 )
      )
  and o.obj# = ta.obj#
  and bitand(ta.property, 32) = 32         /* partitioned table */
/
GRANT READ ON sys.imp_lob_info TO PUBLIC;


REM
REM View to see if a TYPE is used by any table in the database.
REM
CREATE OR REPLACE VIEW sys.imp10typused
    (OWNER, NAME, OID$) AS
        SELECT u.name, o_tab.name, o_typ.oid$ 
        FROM   sys.obj$ o_tab, sys.user$ u, sys.obj$ o_typ, sys.dependency$ d
        WHERE d.p_obj# = o_typ.obj#
        AND d.d_obj# = o_tab.obj#
        AND o_tab.type# = 2
        AND o_tab.owner# = u.user#
/
GRANT SELECT ON sys.imp10typused TO SELECT_CATALOG_ROLE;


REM
REM View to see if a TYPEID is used by another type in a type hierarchy.
REM
CREATE OR REPLACE VIEW sys.imp10typidused
    (TYPEID, TOID, ROOTTOID) AS
        SELECT typeid, toid, roottoid
        FROM sys.type$
/
GRANT SELECT ON sys.imp10typidused TO SELECT_CATALOG_ROLE;


REM
REM View to see if a table has a BEFORE ROW trigger defined on it.
REM
CREATE OR REPLACE VIEW sys.imp_tab_trig
    (TNAME, OWNER, TYPE) AS
        SELECT o.name, u.name, o.type#
        FROM sys.trigger$ tr, sys.obj$ o, sys.user$ u
        WHERE tr.baseobject = o.obj#
        AND    u.user#      = o.owner#
        AND   tr.type#      = 1             /* BEFORE ROW */
        AND   tr.insert$    = 1             /* for INSERT */
        AND   tr.enabled    = 1
        AND    o.owner#     = userenv('SCHEMAID')
/
GRANT READ ON sys.imp_tab_trig TO PUBLIC;


REM
REM View to see if any LOB columns for a table have NOT NULL constraints.
REM
CREATE OR REPLACE VIEW sys.imp_lob_notnull
    (TNAME, OWNER, TYPE, ISNULL) AS
        SELECT o.name, u.name, c.type#, c.null$
        FROM sys.col$ c, sys.obj$ o, sys.user$ u
        WHERE c.obj#   = o.obj#
        AND   u.user#  = o.owner#
        AND   o.owner# = userenv('SCHEMAID')
/
GRANT READ ON sys.imp_lob_notnull TO PUBLIC;

REM
REM obtain the become user parameter
REM
CREATE OR REPLACE VIEW imprbs (value) AS
        SELECT  b.ksppstvl value
        FROM    sys.x$ksppi a, sys.x$ksppcv b
        WHERE   a.indx = b.indx and a.ksppinm = '_restrict_become_user';
/
GRANT SELECT ON sys.imprbs TO IMP_FULL_DATABASE;

-------------------------


REM
REM ****************************************
REM Section 3: Views required by export ONLY
REM ****************************************
REM

REM
REM IOT overflow segments
REM
REM Note tempflags now deprecated
REM
CREATE OR REPLACE VIEW exu8iov (
                objid, dobjid, name, bobjid, owner, ownerid, tablespace, tsno,
                fileno, blockno, audit$, comment$, clusterflag, mtime,
                modified, pctfree$, pctused$, initrans, maxtrans, degree,
                instances, cache, tempflags, property, deflog, tsdeflog) AS
        SELECT  o$.obj#, o$.dataobj#, o$.name, t$.bobj#, u$.name, o$.owner#,
                ts$.name, t$.ts#, t$.file#, t$.block#, t$.audit$, c$.comment$,
                NVL(t$.bobj#, 0), o$.mtime,
                DECODE(BITAND(t$.flags, 1), 1, 1, 0), MOD(t$.pctfree$, 100),
                t$.pctused$, t$.initrans, t$.maxtrans, NVL(t$.degree, 1),
                NVL(t$.instances, 1), DECODE(BITAND(t$.flags, 128), 128, 1, 0),
                MOD(TRUNC(o$.flags / 2), 2), t$.property,
                DECODE(BITAND(t$.flags, 32), 32, 1, 0), ts$.dflogging
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$, sys.user$ u$,
                sys.com$ c$
        WHERE   t$.obj# = o$.obj# AND
                t$.ts# = ts$.ts# AND
                u$.user# = o$.owner# AND
                o$.obj# = c$.obj#(+) AND
                c$.col#(+) IS NULL AND
                BITAND(t$.property, 512) = 512
/
GRANT SELECT ON sys.exu8iov TO SELECT_CATALOG_ROLE;

REM
REM current user's overflow segments
REM
CREATE OR REPLACE VIEW exu8iovu AS
        SELECT  *
        FROM    sys.exu8iov
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8iovu TO PUBLIC;

REM
REM iot INCLUDING key columns
REM
CREATE OR REPLACE VIEW exu8ink (
                objid, ownerid, intcolid, name) AS
        SELECT  o$.obj#, o$.owner#, c$.intcol#, c$.name
        FROM    sys.obj$ o$, sys.ind$ i$, sys.col$ c$
        WHERE   i$.bo# = o$.obj# AND
                c$.obj# = o$.obj# AND
                c$.col# = i$.trunccnt AND
                i$.trunccnt != 0
/
GRANT SELECT ON sys.exu8ink TO SELECT_CATALOG_ROLE;

REM
REM current user's INCLUDING key columns
REM
CREATE OR REPLACE VIEW exu8inku AS
        SELECT  *
        FROM    sys.exu8ink
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8inku TO PUBLIC;

REM
REM 9.0 tables for incremental export
REM
REM Notes: modified, altered or new
REM
CREATE OR REPLACE VIEW exu9tabi AS
        SELECT  t.*
        FROM    sys.exu9tab t, sys.incexp i, sys.incvid v
        WHERE   t.name = i.name(+) AND
                t.ownerid = i.owner#(+) AND
                NVL(i.type#, 2) = 2 AND
                BITAND(t.property, 8192) = 0 AND          /* not inner table */
                (BITAND(t.modified, 1) = 1 OR
                 t.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid OR
                 /* determine if it has inner tables that have been
                 ** changed since last incremental export */
                 (BITAND(t.property, 4) = 4 AND          /* has inner tables */
                  EXISTS (
                    SELECT  0
                    FROM    sys.obj$ o2, sys.tab$ t2
                    WHERE   o2.obj# = t2.obj# AND
                            BITAND(t2.property, 8192) = 8192 AND
                            (o2.mtime > i.itime OR
                             BITAND(t2.flags, 1) = 1) AND
                            o2.obj# IN (
                                SELECT  nt.ntab#
                                FROM    sys.ntab$ nt
                                START WITH nt.obj# = t.objid
                                CONNECT BY PRIOR nt.ntab# = nt.obj#))))
/
GRANT SELECT ON sys.exu9tabi TO SELECT_CATALOG_ROLE;

REM
REM 9.0 tables for cumulative export:
REM
REM Notes: modified, last export was inc, altered or new
REM
CREATE OR REPLACE VIEW exu9tabc AS
        SELECT  t.*
        FROM    sys.exu9tab t, sys.incexp i, sys.incvid v
        WHERE   t.name = i.name(+) AND
                t.ownerid = i.owner#(+) AND
                NVL(i.type#, 2) = 2 AND
                BITAND(t.property, 8192) = 0 AND          /* not inner table */
                (BITAND(t.modified, 1) = 1 OR
                 i.itime > NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) OR
                 t.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid OR
                 /* determine if it has inner tables that have been
                 ** changed since last incremental export */
                 (BITAND(t.property, 4) = 4 AND          /* has inner tables */
                  EXISTS (
                    SELECT  0
                    FROM    sys.obj$ o2, sys.tab$ t2
                    WHERE   o2.obj# = t2.obj# AND
                            BITAND(t2.property, 8192) = 8192 AND
                            (o2.mtime > i.itime OR
                             BITAND(t2.flags, 1) = 1) AND
                            o2.obj# IN (
                                SELECT  nt.ntab#
                                FROM    sys.ntab$ nt
                                START WITH nt.obj# = t.objid
                                CONNECT BY PRIOR nt.ntab# = nt.obj#))))
/
GRANT SELECT ON sys.exu9tabc TO SELECT_CATALOG_ROLE;

REM
REM 8.1 tables for incremental export
REM
REM Notes: modified, altered or new
REM
CREATE OR REPLACE VIEW exu81tabi AS
        SELECT  *
        FROM    sys.exu9tabi
        WHERE   BITAND(trigflag, 31) = trigflag
/
GRANT SELECT ON sys.exu81tabi TO SELECT_CATALOG_ROLE;

REM
REM 8.1 tables for cumulative export
REM
REM Notes: modified, last export was inc, altered or new
REM
CREATE OR REPLACE VIEW exu81tabc AS
        SELECT  *
        FROM    sys.exu9tabc
        WHERE   BITAND(trigflag, 31) = trigflag
/
GRANT SELECT ON sys.exu81tabc TO SELECT_CATALOG_ROLE;

REM
REM 8.0 tables for incremental export
REM
REM Notes: modified, altered or new
REM
CREATE OR REPLACE VIEW exu8tabi AS
        SELECT  *
        FROM    sys.exu81tabi
        WHERE   NOT EXISTS (
                    SELECT  *
                    FROM    sys.col$ c$
                    WHERE   c$.obj# = objid AND
                            c$.type# = 208)
/
GRANT SELECT ON sys.exu8tabi TO SELECT_CATALOG_ROLE;

REM
REM 8.0 tables for cumulative export:
REM
REM Notes: modified, last export was inc, altered or new
REM
CREATE OR REPLACE VIEW exu8tabc AS
        SELECT  *
        FROM    sys.exu81tabc
        WHERE   NOT EXISTS (
                    SELECT  *
                    FROM    sys.col$ c$
                    WHERE   c$.obj# = objid AND
                            c$.type# = 208)
/
GRANT SELECT ON sys.exu8tabc TO SELECT_CATALOG_ROLE;

REM
REM partition description for all non-composite partitioned tables
REM
CREATE OR REPLACE VIEW exu8tbp (
                objid, dobjid, bobjid, ownerid, pname, prowcnt, pblkcnt,
                pavgrlen, pflags, partno, hiboundlen, hiboundval, tsname, tsno,
                fileno, blockno, pctfree$, pctused$, initrans, maxtrans,
                deflog, tsdeflog, blevel, leafcnt, distkey, lblkkey, dblkkey,
                clufac, iflags) AS
        SELECT  o$.obj#, o$.dataobj#, tp$.bo#, o$.owner#, o$.subname,
                NVL(tp$.rowcnt, -1), NVL(tp$.blkcnt, -1), NVL(tp$.avgrln, -1),
                tp$.flags, tp$.part#, tp$.hiboundlen, tp$.hiboundval, ts$.name,
                tp$.ts#, tp$.file#, tp$.block#, MOD(tp$.pctfree$, 100),
                tp$.pctused$, tp$.initrans, tp$.maxtrans,
                DECODE(BITAND(tp$.flags, 4), 4, 1, 0), ts$.dflogging, -1, -1,
                -1, -1, -1, -1, -1
        FROM    sys.obj$ o$, sys.tabpart$ tp$, sys.ts$ ts$
        WHERE   o$.type# = 19 AND
                tp$.obj# = o$.obj# AND
                ts$.ts# = tp$.ts#
/
GRANT SELECT ON sys.exu8tbp TO SELECT_CATALOG_ROLE;

REM
REM partition description for current user's non_composite partitioned tables
REM
CREATE OR REPLACE VIEW exu8tbpu AS
        SELECT  *
        FROM    sys.exu8tbp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8tbpu TO PUBLIC;

REM
REM subpartition description for all composite partitioned tables
REM
CREATE OR REPLACE VIEW exu81tbsp (
                objid, dobjid, pobjid, ownerid, subpartno, subpname, tsname,
                fileno, blockno, tsno, prowcnt, pblkcnt, pavgrlen, blevel,
                leafcnt, distkey, lblkkey, dblkkey, clufac, hiboundlen,
                hiboundval, pflags) AS
        SELECT  o.obj#, o.dataobj#, sp.pobj#, o.owner#, sp.subpart#, o.subname,
                ts.name, sp.file#, sp.block#, sp.ts#, NVL(sp.rowcnt, -1),
                NVL(sp.blkcnt, -1), NVL(sp.avgrln, -1), -1, -1, -1, -1, -1, -1,
                sp.hiboundlen, sp.hiboundval, sp.flags
        FROM    sys.obj$ o, sys.tabsubpart$ sp, sys.ts$ ts
        WHERE   o.type# = 34 AND
                sp.obj# = o.obj# AND
                ts.ts# = sp.ts#
/
GRANT SELECT ON sys.exu81tbsp TO SELECT_CATALOG_ROLE;

REM
REM subpartition description for current user's composite partitioned tables
REM
CREATE OR REPLACE VIEW exu81tbspu AS
        SELECT  *
        FROM    sys.exu81tbsp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81tbspu TO PUBLIC;

REM
REM composite partition description for all composite partitioned tables
REM
REM Notes: blocksize should always be non null
REM
CREATE OR REPLACE VIEW exu9tbcp (
                objid, dobjid, bobjid, ownerid, compname, partno, hiboundlen,
                hiboundval, prowcnt, pblkcnt, pavgrlen, tsname, pctfree$,
                pctused$, initrans, maxtrans, iniexts, extsize, minexts,
                maxexts, extpct, flists, freegrp, pcache, deflog, tsdeflog,
                blevel, leafcnt, distkey, lblkkey, dblkkey, clufac, blocksize,
                hscompress, maxsize, pflags) AS
        SELECT  o.obj#, o.dataobj#, cp.bo#, o.owner#, o.subname, cp.part#,
                cp.hiboundlen, cp.hiboundval, NVL(cp.rowcnt, -1),
                NVL(cp.blkcnt, -1), NVL(cp.avgrln, -1), ts.name,
                MOD(cp.defpctfree, 100), cp.defpctused, cp.definitrans,
                cp.defmaxtrans, NVL(cp.definiexts, 0), NVL(cp.defextsize, 0),
                NVL(cp.defminexts, 0), NVL(cp.defmaxexts, 0),
                NVL(cp.defextpct, -1), NVL(cp.deflists, 0),
                NVL(cp.defgroups, 0),
                DECODE(bitand(cp.defbufpool,3), 1, 'KEEP', 2, 'RECYCLE', NULL),
                cp.deflogging, ts.dflogging, -1, -1, -1, -1, -1, -1,
                NVL(ts.blocksize, 2048), cp.spare2, NVL(cp.defmaxsize, 0),
                cp.flags
        FROM    sys.obj$ o, sys.tabcompart$ cp, sys.ts$ ts
        WHERE   cp.obj# = o.obj# AND
                cp.defts# = ts.ts# (+)
/
GRANT SELECT ON sys.exu9tbcp TO SELECT_CATALOG_ROLE;

REM
REM partition description for current user's composite partitioned tables
REM
CREATE OR REPLACE VIEW exu9tbcpu AS
        SELECT  *
        FROM    sys.exu9tbcp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9tbcpu TO PUBLIC;

REM
REM Pre V9.0 composite partition desc. adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu81tbcp (
                objid, dobjid, bobjid, ownerid, compname, partno, hiboundlen,
                hiboundval, prowcnt, pblkcnt, pavgrlen, tsname, pctfree$,
                pctused$, initrans, maxtrans, iniexts, extsize, minexts,
                maxexts, extpct, flists, freegrp, pcache, deflog, tsdeflog,
                blevel, leafcnt, distkey, lblkkey, dblkkey, clufac) AS
        SELECT  p.objid, p.dobjid, p.bobjid, p.ownerid, p.compname, p.partno,
                p.hiboundlen, p.hiboundval, p.prowcnt, p.pblkcnt, p.pavgrlen,
                p.tsname, p.pctfree$, p.pctused$, p.initrans, p.maxtrans,
                CEIL(p.iniexts * (p.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                CEIL(p.extsize * (p.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                p.minexts, p.maxexts, p.extpct, p.flists, p.freegrp, p.pcache,
                p.deflog, p.tsdeflog, p.blevel, p.leafcnt, p.distkey,
                p.lblkkey, p.dblkkey, p.clufac
        FROM    sys.exu9tbcp p
/
GRANT SELECT ON sys.exu81tbcp TO SELECT_CATALOG_ROLE;

REM
REM pre V9.0 cur user's comp. part. desc. adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu81tbcpu AS
        SELECT  *
        FROM    sys.exu81tbcp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81tbcpu TO PUBLIC;

REM
REM 9.2 view for getting template subpartition information
REM

CREATE OR REPLACE VIEW exu92tsp (
                objid, ownerid, spart_position, subpname, tsname, tsno,
                flags, hiboundlen, hiboundval) AS
        SELECT  dsp.bo#, o.owner#, dsp.spart_position, dsp.spart_name, 
                ts.name, dsp.ts#, dsp.flags, dsp.hiboundlen,
                dsp.hiboundval
        FROM    sys.defsubpart$ dsp, sys.obj$ o, sys.ts$ ts
        WHERE   dsp.bo# = o.obj# AND
                dsp.ts# = ts.ts# (+) AND
                (userenv('SCHEMAID') IN (0, o.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu92tsp TO PUBLIC;

REM
REM 9.2 view for getting template subpartition information for lob columns
REM

CREATE OR REPLACE VIEW exu92tspl (
                objid, ownerid, cname, spart_position, intcol#, lobspname,
                tsname, tsno) AS
        SELECT  dspl.bo#, o.owner#, '"'||c.name||'"', dspl.spart_position,
                dspl.intcol#, dspl.lob_spart_name, ts.name,
                dspl.lob_spart_ts#
        FROM    sys.defsubpartlob$ dspl, sys.obj$ o, sys.ts$ ts, sys.col$ c
        WHERE   dspl.bo# = o.obj# AND
                dspl.lob_spart_ts# = ts.ts# (+) AND
                o.obj# = c.obj# AND
                dspl.intcol# = c.col# AND
                (userenv('SCHEMAID') IN (0, o.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu92tspl TO PUBLIC;

REM
REM get information about a nested table
REM
REM Note tempflags now deprecated
REM
CREATE OR REPLACE VIEW exu8ntb (
                pobjid, objid, name, dobjid, owner, ownerid, tablespace, tsno,
                fileno, blockno, audit$, comment$, clusterflag, mtime,
                modified, pctfree$, pctused$, initrans, maxtrans, degree,
                instances, cache, tempflags, property, deflog, tsdeflog, roid,
                colprop, expname, rowcnt, blkcnt, avgrlen, tflags, ntcolflgs,
                intcolid, objstatus, coltype)
      AS
        SELECT  nt$.obj#, o$.obj#, o$.name, o$.dataobj#, u$.name, o$.owner#,
                ts$.name, t$.ts#, t$.file#, t$.block#, t$.audit$, c$.comment$,
                NVL(t$.bobj#, 0), o$.mtime,
                DECODE(BITAND(t$.flags, 1), 1, 1, 0), MOD(t$.pctfree$, 100),
                t$.pctused$, t$.initrans, t$.maxtrans, NVL(t$.degree, 1),
                NVL(t$.instances, 1), DECODE(BITAND(t$.flags, 128), 128, 1, 0),
                MOD(TRUNC(o$.flags/2), 2), t$.property,
                DECODE(BITAND(t$.flags, 32), 32, 1, 0), ts$.dflogging, o$.oid$,
                cl$.property,
                DECODE(BITAND(cl$.property, 1), 1, a$.name, cl$.name),
                NVL(t$.rowcnt, -1), NVL(t$.blkcnt, -1), NVL(t$.avgrln, -1),
                t$.flags, NVL(ct$.flags, 0), cl$.intcol#, o$.status, 
                cl$.type#
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$, sys.user$ u$,
                sys.com$ c$, sys.ntab$ nt$, sys.col$ cl$, sys.attrcol$ a$,
                sys.coltype$ ct$
        WHERE   t$.obj# = o$.obj# AND
                t$.ts# = ts$.ts# AND
                u$.user# = o$.owner# AND
                o$.obj# = c$.obj#(+) AND
                c$.col#(+) IS NULL AND
                nt$.ntab# = o$.obj# AND
                cl$.obj# = ct$.obj# (+) AND
                cl$.intcol# = ct$.intcol# (+)  AND
                nt$.obj# = cl$.obj# AND
                nt$.intcol# = cl$.intcol# AND
                cl$.obj# = a$.obj# (+) AND
                cl$.intcol# = a$.intcol# (+) AND
                BITAND(cl$.property, 32768) != 32768    /* not unused column */
/
GRANT SELECT ON sys.exu8ntb TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8ntbu AS
        SELECT  *
        FROM    sys.exu8ntb
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8ntbu TO PUBLIC;

REM
REM get tables that were included in an incremental/cumulative export that
REM have inner nested tables
REM
REM use for inc/cum when record = yes
REM
CREATE OR REPLACE VIEW exu8tntic (
                objid, ownerid, tname) AS
        SELECT  o$.obj#, o$.owner#, o$.name
        FROM    sys.obj$ o$, sys.tab$ t$
        WHERE   (o$.owner#, o$.name) IN (
                    SELECT  i$.owner#, i$.name      /* tables in this export */
                    FROM    sys.incexp i$, sys.incvid v$
                    WHERE   i$.expid > v$.expid AND
                            i$.type# = 2) AND
                t$.obj# = o$.obj# AND
                BITAND(t$.property, 4) = 4              /* has nested tables */
/
GRANT SELECT ON sys.exu8tntic TO SELECT_CATALOG_ROLE;

REM
REM use for inc when record = no
REM
CREATE OR REPLACE VIEW exu9tnti (
                objid, ownerid, tname) AS
        SELECT  objid, ownerid, name
        FROM    sys.exu9tabi                        /* tables in this export */
        WHERE   BITAND(property, 4) = 4           /* table has nested tables */
/
GRANT SELECT ON sys.exu9tnti TO SELECT_CATALOG_ROLE;

REM
REM use for cum when record = no
REM
CREATE OR REPLACE VIEW exu9tntc (
                objid, ownerid, tname) AS
        SELECT  objid, ownerid, name
        FROM    sys.exu9tabc                        /* tables in this export */
        WHERE   BITAND(property, 4) = 4           /* table has nested tables */
/
GRANT SELECT ON sys.exu9tntc TO SELECT_CATALOG_ROLE;

REM
REM use for inc when record = no
REM
CREATE OR REPLACE VIEW exu81tnti (
                objid, ownerid, tname) AS
        SELECT  objid, ownerid, name
        FROM    sys.exu81tabi                       /* tables in this export */
        WHERE   BITAND(property, 4) = 4           /* table has nested tables */
/
GRANT SELECT ON sys.exu81tnti TO SELECT_CATALOG_ROLE;

REM
REM use for cum when record = no
REM
CREATE OR REPLACE VIEW exu81tntc (
                objid, ownerid, tname) AS
        SELECT  objid, ownerid, name
        FROM    sys.exu81tabc                       /* tables in this export */
        WHERE   BITAND(property, 4) = 4           /* table has nested tables */
/
GRANT SELECT ON sys.exu81tntc TO SELECT_CATALOG_ROLE;

REM
REM 8.0 use for inc when record = no
REM
CREATE OR REPLACE VIEW exu8tnti (
                objid, ownerid, tname) AS
        SELECT  objid, ownerid, name
        FROM    sys.exu8tabi                        /* tables in this export */
        WHERE   BITAND(property, 4) = 4           /* table has nested tables */
/
GRANT SELECT ON sys.exu8tnti TO SELECT_CATALOG_ROLE;

REM
REM 8.0 use for cum when record = no
REM
CREATE OR REPLACE VIEW exu8tntc (
                objid, ownerid, tname) AS
        SELECT  objid, ownerid, name
        FROM    sys.exu8tabc                        /* tables in this export */
        WHERE   BITAND(property, 4) = 4           /* table has nested tables */
/
GRANT SELECT ON sys.exu8tntc TO SELECT_CATALOG_ROLE;

REM
REM partition description for all non_composite partitioned indexes
REM and index organized tables
REM
CREATE OR REPLACE VIEW exu8ixp (
                objid, dobjid, bobjid, ownerid, pname, prowcnt, pblkcnt,
                pavgrlen, pflags, partno, hiboundlen, hiboundval, tsname, tsno,
                fileno, blockno, pctfree$, pctused$, initrans, maxtrans,
                deflog, tsdeflog, blevel, leafcnt, distkey, lblkkey, dblkkey,
                clufac, iflags) AS
        SELECT  o$.obj#, o$.dataobj#, ip$.bo#, o$.owner#, o$.subname,
                NVL(ip$.rowcnt, -1),
                NVL2((
                    SELECT  i$.bo#
                    FROM    sys.ind$ i$
                    WHERE   i$.type# = 4 AND
                            i$.obj# = ip$.bo#),
                    NVL(ip$.leafcnt, -1), -1),  /* leafcnt (blkcnt) if table */
                NVL((
                    SELECT  tp$.avgrln
                    FROM    sys.tabpart$ tp$              /* avglen if table */
                    WHERE   tp$.part# = ip$.part# AND
                            tp$.bo# = (
                                SELECT  i$.bo#
                                FROM    sys.ind$ i$
                                WHERE   i$.type# = 4 AND        /* iot - top */
                                        i$.obj# = ip$.bo#)), -1),
                NVL2((
                    SELECT  i$.bo#
                    FROM    sys.ind$ i$              /* stats flags if table */
                    WHERE   i$.type# = 4 AND
                            i$.obj# = ip$.bo#),
                    ip$.flags, -1),
                ip$.part#, ip$.hiboundlen, ip$.hiboundval, ts$.name, ip$.ts#,
                ip$.file#, ip$.block#, MOD(ip$.pctfree$, 100), 0, ip$.initrans,
                ip$.maxtrans, DECODE(BITAND(ip$.flags, 4), 4, 1, 0),
                ts$.dflogging, NVL(ip$.blevel, -1), NVL(ip$.leafcnt, -1),
                NVL(ip$.distkey, -1), NVL(ip$.lblkkey, -1),
                NVL(ip$.dblkkey, -1), NVL(ip$.clufac, -1), ip$.flags
        FROM    sys.obj$ o$, sys.indpart$ ip$, sys.ts$ ts$
        WHERE   o$.type# = 20 AND
                ip$.obj# = o$.obj# AND
                ts$.ts# = ip$.ts#
/
GRANT SELECT ON sys.exu8ixp TO SELECT_CATALOG_ROLE;

REM
REM partition description for current user's non_composite partitioned indexes.
REM
CREATE OR REPLACE VIEW exu8ixpu AS
        SELECT  *
        FROM    sys.exu8ixp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8ixpu TO PUBLIC;

REM
REM partition description for all composite partitioned indexes
REM
CREATE OR REPLACE VIEW exu9ixcp (
                objid, dobjid, bobjid, ownerid, compname, partno, hiboundlen,
                hiboundval, prowcnt, pblkcnt, pavgrlen, tsname, pctfree$,
                pctused$, initrans, maxtrans, iniexts, extsize, minexts,
                maxexts, extpct, flists, freegrp, pcache, deflog, tsdeflog,
                blevel, leafcnt, distkey, lblkkey, dblkkey, clufac, blocksize,
                hscompress, maxsize, pflags) AS
        SELECT  o.obj#, o.dataobj#, icp.bo#, o.owner#, o.subname, icp.part#,
                icp.hiboundlen, icp.hiboundval, NVL(icp.rowcnt, -1), -1, -1,
                ts.name, MOD(icp.defpctfree, 100), 0, icp.definitrans,
                icp.defmaxtrans, NVL(icp.definiexts, 0),
                NVL(icp.defextsize, 0), NVL(icp.defminexts, 0),
                NVL(icp.defmaxexts, 0), NVL(icp.defextpct, -1),
                NVL(icp.deflists, 0), NVL(icp.defgroups, 0),
                DECODE(bitand(icp.defbufpool,3), 1, 'KEEP', 2, 'RECYCLE', NULL),
                icp.deflogging, ts.dflogging, NVL(icp.blevel, -1),
                NVL(icp.leafcnt, -1), NVL(icp.distkey, -1),
                NVL(icp.lblkkey, -1), NVL(icp.dblkkey, -1),
                NVL(icp.clufac, -1),
                NVL(ts.blocksize, (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = (NVL((
                                SELECT  i$.ts#
                                FROM    sys.ind$ i$
                                WHERE   i$.obj# = icp.bo# AND
                                        i$.type# != 8 AND
                                        i$.type# != 4 AND
                                        BITAND(i$.flags, 4096) = 0),
                                           0)))),
                0, NVL(icp.defmaxsize, 0), icp.flags
        FROM    sys.obj$ o, sys.indcompart$ icp, sys.ts$ ts
        WHERE   icp.obj# = o.obj# AND
                icp.defts# = ts.ts# (+)
/
GRANT SELECT ON sys.exu9ixcp TO SELECT_CATALOG_ROLE;

REM
REM partition description for current user's composite partitioned indexes.
REM
CREATE OR REPLACE VIEW exu9ixcpu AS
        SELECT  *
        FROM    sys.exu9ixcp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9ixcpu TO PUBLIC;

REM
REM pre V9.0 composite partition desc. adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu81ixcp (
                objid, dobjid, bobjid, ownerid, compname, partno, hiboundlen,
                hiboundval, prowcnt, pblkcnt, pavgrlen, tsname, pctfree$,
                pctused$, initrans, maxtrans, iniexts, extsize, minexts,
                maxexts, extpct, flists, freegrp, pcache, deflog, tsdeflog,
                blevel, leafcnt, distkey, lblkkey, dblkkey, clufac) AS
        SELECT  p.objid, p.dobjid, p.bobjid, p.ownerid, p.compname, p.partno,
                p.hiboundlen, p.hiboundval, p.prowcnt, p.pblkcnt, p.pavgrlen,
                p.tsname, p.pctfree$, p.pctused$, p.initrans, p.maxtrans,
                CEIL(p.iniexts * (p.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                CEIL(p.extsize * (p.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                p.minexts, p.maxexts, p.extpct, p.flists, p.freegrp, p.pcache,
                p.deflog, p.tsdeflog, p.blevel, p.leafcnt, p.distkey,
                p.lblkkey, p.dblkkey, p.clufac
        FROM    sys.exu9ixcp p
/
GRANT SELECT ON sys.exu81ixcp TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 cur user's comp. part. desc. adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu81ixcpu AS
        SELECT  *
        FROM    sys.exu81ixcp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81ixcpu TO PUBLIC;

REM
REM subpartition description for all composite partitioned indexes
REM
CREATE OR REPLACE VIEW exu81ixsp (
                objid, dobjid, pobjid, ownerid, subpartno, subpname, tsname,
                fileno, blockno, tsno, prowcnt, pblkcnt, pavgrlen, blevel,
                leafcnt, distkey, lblkkey, dblkkey, clufac, hiboundlen,
                hiboundval, pflags) AS
        SELECT  o.obj#, o.dataobj#, isp.pobj#, o.owner#, isp.subpart#,
                o.subname, ts.name, isp.file#, isp.block#, isp.ts#,
                NVL(isp.rowcnt, -1), -1, -1, NVL(isp.blevel, -1),
                NVL(isp.leafcnt, -1), NVL(isp.distkey, -1),
                NVL(isp.lblkkey, -1), NVL(isp.dblkkey, -1),
                NVL(isp.clufac, -1), isp.hiboundlen, isp.hiboundval, isp.flags
        FROM    sys.obj$ o, sys.indsubpart$ isp, sys.ts$ ts
        WHERE   o.type# = 35 AND
                isp.obj# = o.obj# AND
                ts.ts# = isp.ts#
/
GRANT SELECT ON sys.exu81ixsp TO SELECT_CATALOG_ROLE;

REM
REM subpartition description for current user's composite partitioned indexes.
REM
CREATE OR REPLACE VIEW exu81ixspu AS
        SELECT  *
        FROM    sys.exu81ixsp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81ixspu TO PUBLIC;

REM
REM partitioning key columns for all partitioned tables. NOTE: property,
REM function, funclen added in anticipation of support for virtual cols. as
REM partitioning keys and to keep table and index part. views in synch.
REM
CREATE OR REPLACE VIEW exu8pok (
                objid, ownerid, posno, name, property, function, funclen) AS
        SELECT  o$.obj#, o$.owner#, p$.pos#,
                DECODE(BITAND(c$.property, 1), 1, a$.name, c$.name),
                c$.property, c$.default$, c$.deflength
        FROM    sys.obj$ o$, sys.partcol$ p$, sys.col$ c$, sys.attrcol$ a$
        WHERE   o$.obj# = c$.obj# AND
                o$.obj# = p$.obj# AND
                p$.intcol# = c$.intcol# AND
                p$.obj# = a$.obj# (+) AND
                p$.intcol# = a$.intcol# (+)
/
GRANT SELECT ON sys.exu8pok TO SELECT_CATALOG_ROLE;

REM
REM partitioning key columns for current user's partitioned tables
REM
CREATE OR REPLACE VIEW exu8poku AS
        SELECT  *
        FROM    sys.exu8pok
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8poku TO PUBLIC;

REM
REM subpartitioning key columns for all composite partitioned (R+H) tables.
REM NOTE: property, function, funclen added in anticipation of support for
REM function, funclen added in anticipation of support for virtual cols. as
REM partitioning keys and to keep table and index part. views in synch.
REM
CREATE OR REPLACE VIEW exu81spok (
                objid, ownerid, posno, name, property, function, funclen) AS
        SELECT  o.obj#, o.owner#, spc.pos#,
                DECODE(BITAND(c.property, 1), 1, a.name, c.name),
                c.property, c.default$, c.deflength
        FROM    sys.obj$ o, sys.subpartcol$ spc, sys.col$ c, sys.attrcol$ a
        WHERE   o.obj# = c.obj# AND
                o.obj# = spc.obj# AND
                spc.intcol# = c.intcol# AND
                spc.obj# = a.obj# (+) AND
                spc.intcol# = a.intcol# (+)
/
GRANT SELECT ON sys.exu81spok TO SELECT_CATALOG_ROLE;

REM
REM subpartitioning key columns for current user's composite partitioned tables
REM
CREATE OR REPLACE VIEW exu81spoku AS
        SELECT  *
        FROM    sys.exu81spok
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81spoku TO PUBLIC;

REM
REM partitioning key columns for all partitioned indexes
REM
CREATE OR REPLACE VIEW exu8poki (
                objid, ownerid, posno, name, property, function, funclen) AS
        SELECT  o.obj#, o.owner#, p.pos#,
                DECODE(BITAND(c.property, 1), 1, a.name, c.name),
                c.property, c.default$, c.deflength
        FROM    sys.obj$ o, sys.partcol$ p, sys.ind$ i, sys.col$ c,
                sys.attrcol$ a
        WHERE   o.obj# = p.obj# AND
                i.obj# = o.obj# AND
                i.bo# = c.obj# AND
                p.intcol# = c.intcol# AND
                c.obj# = a.obj# (+) AND
                c.intcol# = a.intcol# (+)
/
GRANT SELECT ON sys.exu8poki TO SELECT_CATALOG_ROLE;

REM
REM partitioning key columns for current user's partitioned indexes
REM
CREATE OR REPLACE VIEW exu8pokiu AS
        SELECT  *
        FROM    sys.exu8poki
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8pokiu TO PUBLIC;

REM
REM subpartitioning key columns for all composite partitioned indexes
REM not used in 81
REM
CREATE OR REPLACE VIEW exu81spoki (
                objid, ownerid, posno, name, property, function, funclen) AS
        SELECT  o.obj#, o.owner#, sp.pos#, c.name, c.property, c.default$,
                c.deflength
        FROM    sys.obj$ o, sys.subpartcol$ sp, sys.ind$ i, sys.col$ c
        WHERE   o.obj# = sp.obj# AND
                i.obj# = o.obj# AND
                i.bo# = c.obj# AND
                sp.intcol# = c.intcol#
/
GRANT SELECT ON sys.exu81spoki TO SELECT_CATALOG_ROLE;

REM
REM subpartitioning key columns for current user's composite
REM partitioned indexes
REM
CREATE OR REPLACE VIEW exu81spokiu AS
        SELECT  *
        FROM    sys.exu81spoki
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81spokiu TO PUBLIC;

REM
REM table/index level storage definition for all partitioned tables/indexes
REM description on partitioned object
REM
CREATE OR REPLACE VIEW exu9pds (
                objid, type, ownerid, ptype, subptype, pflag, pcnt, pkcnt,
                pctfree$, pctused$, initrans, maxtrans, iniexts, extsize,
                minexts, maxexts, extpct, flists, freegrp, tsname, deflog,
                pcache, blocksize, hscompress, defsubpcnt, maxsize) AS
        SELECT  o$.obj#, o$.type#, o$.owner#, po$.parttype,
                MOD(po$.spare2, 256), NVL(po$.flags, 0), po$.partcnt,
                po$.partkeycols, MOD(po$.defpctfree, 100), po$.defpctused,
                po$.definitrans, po$.defmaxtrans, po$.deftiniexts,
                po$.defextsize, po$.defminexts, po$.defmaxexts, po$.defextpct,
                po$.deflists, po$.defgroups, ts$.name, po$.deflogging,
                DECODE(bitand(po$.spare1,3), 1, 'KEEP', 2, 'RECYCLE', NULL),
                NVL(ts$.blocksize, 2048),      /* non null for table/indexes */
                (po$.spare2/4294967296),  /* divide by ^x80000000 for byte 4 */
                MOD(TRUNC(po$.spare2/65536), 65536), po$.defmaxsize
        FROM    sys.partobj$ po$, sys.obj$ o$, sys.ts$ ts$
        WHERE   po$.defts# = ts$.ts# (+) AND
                po$.obj# = o$.obj#
/
GRANT SELECT ON sys.exu9pds TO SELECT_CATALOG_ROLE;

REM
REM User's table/index level storage definition partitioned tables/indexes
REM
CREATE OR REPLACE VIEW exu9pdsu AS
        SELECT  *
        FROM    sys.exu9pds
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9pdsu TO PUBLIC;

REM
REM pre V9.0 part. table/index level storage def. adjusted for TS specific
REM blocksizes
REM
CREATE OR REPLACE VIEW exu8pds (
                objid, type, ownerid, ptype, subptype, pflag, pcnt, pkcnt,
                pctfree$, pctused$, initrans, maxtrans, iniexts, extsize,
                minexts, maxexts, extpct, flists, freegrp, tsname, deflog,
                pcache) AS
        SELECT  p.objid, p.type, p.ownerid, p.ptype, p.subptype, p.pflag,
                p.pcnt, p.pkcnt, p.pctfree$, p.pctused$, p.initrans,
                p.maxtrans,
                NVL(CEIL(p.iniexts * (p.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                    NULL),
                NVL(CEIL(p.extsize * (p.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                    NULL),
                p.minexts, p.maxexts, p.extpct, p.flists, p.freegrp, p.tsname,
                p.deflog, p.pcache
        FROM    sys.exu9pds p
/
GRANT SELECT ON sys.exu8pds TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 cur user's part. table/index level storage def. adjusted for
REM TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu8pdsu AS
        SELECT  *
        FROM    sys.exu8pds
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8pdsu TO PUBLIC;

REM
REM not null constraints on columns
REM
CREATE OR REPLACE VIEW exu8colnn (
                tobjid, intcolid, conname, isnull, enabled, defer) AS
        SELECT  cc$.obj#, cc$.intcol#, con$.name, 1, NVL(cd$.enabled, 0),
                NVL(cd$.defer, 0)
        FROM    sys.con$ con$, sys.cdef$ cd$, sys.ccol$ cc$
        WHERE   cc$.con# = cd$.con# AND
                cd$.con# = con$.con# AND
                cd$.type# IN (7, 11)
/
GRANT SELECT ON sys.exu8colnn TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8col_temp (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                colprop, comment$, dfltlen, enabled, defer, flags, charsetid,
                charsetform, fsprecision, lfprecision, charlen) AS
        SELECT  o$.obj#, u$.name, o$.owner#, o$.name, c$.name, c$.length,
                c$.precision#, c$.scale, c$.type#, NVL(cn.isnull, 0),
                cn.conname, c$.col#, c$.intcol#, c$.segcol#, c$.property,
                com$.comment$, NVL(c$.deflength, 0), cn.enabled, cn.defer,
                NVL(o$.flags, 0), NVL(c$.charsetid, 0), NVL(c$.charsetform, 0),
                c$.scale, c$.precision#, c$.spare3
        FROM    sys.col$ c$, sys.obj$ o$, sys.user$ u$, sys.com$ com$,
                sys.exu8colnn cn
        WHERE   c$.obj# = o$.obj# AND
                o$.owner# = u$.user# AND
                c$.obj# = com$.obj#(+) AND
                c$.intcol# = com$.col#(+) AND
                c$.obj# = cn.tobjid AND
                c$.intcol# = cn.intcolid
      UNION ALL
        SELECT  o$.obj#, u$.name, o$.owner#, o$.name, c$.name, c$.length,
                c$.precision#, c$.scale, c$.type#, 0, NULL, c$.col#,
                c$.intcol#, c$.segcol#, c$.property, com$.comment$,
                NVL(c$.deflength, 0), 0, 0, NVL(o$.flags, 0),
                NVL(c$.charsetid, 0), NVL(c$.charsetform, 0), c$.scale,
                c$.precision#, c$.spare3
        FROM    sys.col$ c$, sys.obj$ o$, sys.user$ u$, sys.com$ com$
        WHERE   c$.obj# = o$.obj# AND
                o$.owner# = u$.user# AND
                c$.obj# = com$.obj#(+) AND
                c$.intcol# = com$.col#(+) AND
                BITAND(c$.property, 32768) != 32768 AND /* not unused column */
                NOT EXISTS (
                    SELECT  NULL
                    FROM    sys.exu8colnn cn
                    WHERE   c$.obj# = cn.tobjid AND
                            c$.intcol# = cn.intcolid)
/
GRANT SELECT ON sys.exu8col_temp TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8col (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, charsetid, charsetform, fsprecision,
                lfprecision, charlen, tflags) AS
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, type, isnull, conname, colid, intcolid,
                segcolid, comment$, default$, dfltlen, enabled, defer,
                v$.flags, colprop, '', '', v$.charsetid, v$.charsetform,
                v$.fsprecision, v$.lfprecision, v$.charlen,  NVL(ct$.flags, 0)
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$
        WHERE   c$.obj# = v$.tobjid AND
                c$.intcol# = v$.intcolid AND
                v$.tobjid = ct$.obj# (+) AND
                (BITAND(v$.colprop, 32) != 32 OR      /* not a hidden column */
                 BITAND(v$.colprop, 1048608)= 1048608 OR/*snapshot hidden col*/
                 BITAND(v$.colprop, 4194304) = 4194304) /* RLS hidden column */
/
GRANT SELECT ON sys.exu8col TO SELECT_CATALOG_ROLE;

REM
REM current user's columns
REM
CREATE OR REPLACE VIEW exu8colu AS
        SELECT  *
        FROM    sys.exu8col
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8colu TO PUBLIC;

CREATE OR REPLACE VIEW exu8col_temp_tts_unused_col (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                colprop, comment$, dfltlen, enabled, defer, flags, charsetid,
                charsetform, fsprecision, lfprecision, charlen) AS
        SELECT  o$.obj#, u$.name, o$.owner#, o$.name, c$.name, c$.length,
                c$.precision#, c$.scale, c$.type#, NVL(cn.isnull, 0),
                cn.conname, c$.col#, c$.intcol#, c$.segcol#, c$.property,
                com$.comment$, NVL(c$.deflength, 0), cn.enabled, cn.defer,
                NVL(o$.flags, 0), NVL(c$.charsetid, 0), NVL(c$.charsetform, 0),
                c$.scale, c$.precision#, c$.spare3
        FROM    sys.col$ c$, sys.obj$ o$, sys.user$ u$, sys.com$ com$,
                sys.exu8colnn cn
        WHERE   c$.obj# = o$.obj# AND
                o$.owner# = u$.user# AND
                c$.obj# = com$.obj#(+) AND
                c$.segcol# = com$.col#(+) AND
                c$.obj# = cn.tobjid AND
                c$.intcol# = cn.intcolid
      UNION ALL
        SELECT  o$.obj#, u$.name, o$.owner#, o$.name, c$.name, c$.length,
                c$.precision#, c$.scale, c$.type#, 0, NULL, c$.col#,
                c$.intcol#, c$.segcol#, c$.property, com$.comment$,
                NVL(c$.deflength, 0), 0, 0, NVL(o$.flags, 0),
                NVL(c$.charsetid, 0), NVL(c$.charsetform, 0), c$.scale,
                c$.precision#, c$.spare3
        FROM    sys.col$ c$, sys.obj$ o$, sys.user$ u$, sys.com$ com$
        WHERE   c$.obj# = o$.obj# AND
                o$.owner# = u$.user# AND
                c$.obj# = com$.obj#(+) AND
                c$.segcol# = com$.col#(+) AND
                NOT EXISTS (
                    SELECT  NULL
                    FROM    sys.exu8colnn cn
                    WHERE   c$.obj# = cn.tobjid AND
                            c$.intcol# = cn.intcolid)
/
GRANT SELECT ON sys.exu8col_temp_tts_unused_col TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8col_tts_unused_col (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, charsetid, charsetform, fsprecision,
                lfprecision, charlen, tflags) AS
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, type, isnull, conname, colid, intcolid,
                segcolid, comment$, default$, dfltlen, enabled, defer,
                v$.flags, colprop, '', '', v$.charsetid, v$.charsetform,
                v$.fsprecision, v$.lfprecision, v$.charlen,  NVL(ct$.flags, 0)
        FROM    sys.exu8col_temp_tts_unused_col v$, sys.col$ c$,
                sys.coltype$ ct$
        WHERE   c$.obj# = v$.tobjid AND
                c$.intcol# = v$.intcolid AND
                v$.tobjid = ct$.obj# (+)  AND
                (BITAND(v$.colprop,32768) = 32768 OR        /* unused column */
                 BITAND(v$.colprop, 32) != 32 OR      /* not a hidden column */
                 BITAND(v$.colprop, 1048608)= 1048608 OR/*snapshot hidden col*/
                 BITAND(v$.colprop, 4194304) = 4194304) /* RLS hidden column */
/
GRANT SELECT ON sys.exu8col_tts_unused_col TO SELECT_CATALOG_ROLE;

REM
REM view to access columns in tables containing object oriented columns
REM in normal tables
REM
CREATE OR REPLACE VIEW exu8coo (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, charsetid, charsetform, fsprecision,
                lfprecision, charlen, tflags) AS
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name, v$.charsetid, v$.charsetform, v$.fsprecision,
                v$.lfprecision, v$.charlen, NVL(ct$.flags,0)
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$
        WHERE   (BITAND (v$.colprop, 32) != 32 OR     /* not a hidden column */
                 BITAND(v$.colprop, 1048608)= 1048608 OR/*snapshot hidden col*/
                 BITAND (v$.colprop, 4194304) = 4194304) AND/* RLS hidden col*/
                v$.tobjid = c$.obj# (+) AND
                v$.intcolid = c$.intcol# (+) AND
                v$.tobjid = ct$.obj# (+) AND
                v$.intcolid = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#,13) = 13
/
GRANT SELECT ON sys.exu8coo TO SELECT_CATALOG_ROLE;

REM
REM current user's columns
REM
CREATE OR REPLACE VIEW exu8coou AS
        SELECT  *
        FROM    sys.exu8coo
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8coou TO PUBLIC;

REM
REM view to access columns in extent tables, extent views and inner nested
REM tables
REM
CREATE OR REPLACE VIEW exu8coe (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, colclass, charsetid, charsetform,
                fsprecision, lfprecision, charlen, tflags) AS
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name,
                DECODE (v$.name, 'SYS_NC_OID$', 1, 'NESTED_TABLE_ID', 2,
                        'SYS_NC_ROWINFO$', 3, 100),
                v$.charsetid, v$.charsetform, v$.fsprecision, v$.lfprecision,
                v$.charlen, NVL(ct$.flags, 0)
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$
        WHERE   c$.obj# = v$.tobjid AND
                c$.intcol# = v$.intcolid AND
                (BITAND(v$.colprop, 2) = 2 OR                 /* SYS_NC_OID$ */
                 BITAND(v$.colprop, 16) = 16 OR           /* NESTED_TABLE_ID */
                 BITAND(v$.colprop, 512) = 512) AND       /* SYS_NC_ROWINFO$ */
                c$.obj# = ct$.obj# (+) AND
                c$.intcol# = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#, -1) != 10 /* bug 882543: no non-existent types */
/
GRANT SELECT ON sys.exu8coe TO SELECT_CATALOG_ROLE;

REM
REM current user's columns
REM
CREATE OR REPLACE VIEW exu8coeu AS
        SELECT  *
        FROM    sys.exu8coe
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8coeu TO PUBLIC;

REM
REM view to access columns in extent tables, extent views and inner nested
REM tables (v9.2+ with optional type synonyms)
REM
CREATE OR REPLACE VIEW exu9coe (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, colclass, charsetid, charsetform,
                fsprecision, lfprecision, charlen, tflags, typesyn) AS
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name,
                DECODE (v$.name, 'SYS_NC_OID$', 1, 'NESTED_TABLE_ID', 2,
                        'SYS_NC_ROWINFO$', 3, 100),
                v$.charsetid, v$.charsetform, v$.fsprecision, v$.lfprecision,
                v$.charlen, NVL(ct$.flags, 0), s$.name
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$, sys.obj$ s$
        WHERE   c$.obj# = v$.tobjid AND
                c$.intcol# = v$.intcolid AND
                (BITAND(v$.colprop, 2) = 2 OR                 /* SYS_NC_OID$ */
                 BITAND(v$.colprop, 16) = 16 OR           /* NESTED_TABLE_ID */
                 BITAND(v$.colprop, 512) = 512) AND       /* SYS_NC_ROWINFO$ */
                c$.obj# = ct$.obj# (+) AND
                c$.intcol# = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#, -1) != 10 /* bug 882543: no non-existent types */
                AND ct$.synobj# IS NOT NULL AND /* has type synonym */
                ct$.synobj# = s$.obj#
      UNION ALL
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name,
                DECODE (v$.name, 'SYS_NC_OID$', 1, 'NESTED_TABLE_ID', 2,
                        'SYS_NC_ROWINFO$', 3, 100),
                v$.charsetid, v$.charsetform, v$.fsprecision, v$.lfprecision,
                v$.charlen, NVL(ct$.flags, 0), NULL
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$
        WHERE   c$.obj# = v$.tobjid AND
                c$.intcol# = v$.intcolid AND
                (BITAND(v$.colprop, 2) = 2 OR                 /* SYS_NC_OID$ */
                 BITAND(v$.colprop, 16) = 16 OR           /* NESTED_TABLE_ID */
                 BITAND(v$.colprop, 512) = 512) AND       /* SYS_NC_ROWINFO$ */
                c$.obj# = ct$.obj# (+) AND
                c$.intcol# = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#, -1) != 10 /* bug 882543: no non-existent types */
                AND ct$.synobj# IS NULL /* does not have type synonym */
/
GRANT SELECT ON sys.exu9coe TO SELECT_CATALOG_ROLE;

REM
REM current user's columns
REM
CREATE OR REPLACE VIEW exu9coeu AS
        SELECT  *
        FROM    sys.exu9coe
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9coeu TO PUBLIC;

REM
REM Extention of exu9coe to include 'normal' columns that may have 
REM default values.  The corrisponding code in exp only uses that column
REM information when generating default statements for the object table.
REM
CREATE OR REPLACE VIEW exu10coe (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, colclass, charsetid, charsetform,
                fsprecision, lfprecision, charlen, tflags, typesyn) AS
        SELECT  * 
        FROM    sys.exu9coe 
      UNION ALL
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name,
                DECODE (v$.name, 'SYS_NC_OID$', 1, 'NESTED_TABLE_ID', 2,
                        'SYS_NC_ROWINFO$', 3, 100),
                v$.charsetid, v$.charsetform, v$.fsprecision, v$.lfprecision,
                v$.charlen, NVL(ct$.flags, 0), NULL
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$
        WHERE   c$.obj# = v$.tobjid AND
                c$.intcol# = v$.intcolid AND
                c$.intcol# = ct$.intcol# (+) AND
                (BITAND(v$.colprop, 32)      != 32 OR          /* not hidden */
                 BITAND(v$.colprop, 1048608) = 1048608 OR  /* snapsht hidden */
                 BITAND(v$.colprop, 4194304) = 4194304) AND    /* RLS Hidden */
                c$.obj# = ct$.obj# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#, -1) != 10 /* bug 882543: no non-existent types */
/
GRANT SELECT ON sys.exu10coe TO SELECT_CATALOG_ROLE;

REM
REM current user's columns
REM
CREATE OR REPLACE VIEW exu10coeu AS
        SELECT  *
        FROM    sys.exu10coe
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu10coeu TO PUBLIC;

REM
REM view to access columns in scalar inner nested tables
REM
CREATE OR REPLACE VIEW exu8csn (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, colclass, charsetid, charsetform,
                fsprecision, lfprecision, charlen, tflags) AS
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name,
                DECODE (v$.name, 'NESTED_TABLE_ID', 2, 'COLUMN_VALUE', 3, 100),
                v$.charsetid, v$.charsetform, v$.fsprecision, v$.lfprecision,
                v$.charlen, NVL(ct$.flags, 0)
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$
        WHERE   c$.obj# = v$.tobjid AND
                c$.intcol# = v$.intcolid AND
                c$.obj# = ct$.obj# (+) AND
                c$.intcol# = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#, -1) != 10 /* bug 882543: no non-existent types */
/
GRANT SELECT ON sys.exu8csn TO SELECT_CATALOG_ROLE;

REM
REM current user's columns
REM
CREATE OR REPLACE VIEW exu8csnu AS
        SELECT  *
        FROM    sys.exu8csn
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8csnu TO PUBLIC;

REM
REM 9.0+ version of column views for TYPE SYNONYM support
REM 
REM view to access columns in tables containing object oriented columns
REM in normal tables returning synonym of type if any was used
REM
CREATE OR REPLACE VIEW exu9coo (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, charsetid, charsetform, fsprecision,
                lfprecision, charlen, tflags, typesyn) AS
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name, v$.charsetid, v$.charsetform, v$.fsprecision,
                v$.lfprecision, v$.charlen, NVL(ct$.flags,0), NULL
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$
        WHERE   (BITAND (v$.colprop, 32) != 32 OR     /* not a hidden column */
                 BITAND(v$.colprop, 1048608)= 1048608 OR/*snapshot hidden col*/
                 BITAND (v$.colprop, 4194304) = 4194304) AND/* RLS hidden col*/
                v$.tobjid = c$.obj# (+) AND
                v$.intcolid = c$.intcol# (+) AND
                v$.tobjid = ct$.obj# (+) AND
                v$.intcolid = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#,13) = 13 AND
                ct$.synobj# IS NULL
      UNION ALL
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name, v$.charsetid, v$.charsetform, 
                v$.fsprecision, v$.lfprecision, v$.charlen, NVL(ct$.flags,0),
                so$.name
        FROM    sys.exu8col_temp v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$, sys.obj$ so$
        WHERE   (BITAND (v$.colprop, 32) != 32 OR     /* not a hidden column */
                 BITAND(v$.colprop, 1048608)= 1048608 OR/*snapshot hidden col*/
                 BITAND (v$.colprop, 4194304) = 4194304) AND/* RLS hidden col*/
                v$.tobjid = c$.obj# (+) AND
                v$.intcolid = c$.intcol# (+) AND
                v$.tobjid = ct$.obj# (+) AND
                v$.intcolid = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#,13) = 13 AND so$.obj# = ct$.synobj#
/
GRANT SELECT ON sys.exu9coo TO SELECT_CATALOG_ROLE;

REM
REM 10.2+ version of column views for TTS mode
REM 
REM view to include unused columns
REM
CREATE OR REPLACE VIEW exu9coo_tts_unused_col (
                tobjid, towner, townerid, tname, name, length, precision,
                scale, type, isnull, conname, colid, intcolid, segcolid,
                comment$, default$, dfltlen, enabled, defer, flags, colprop,
                adtname, adtowner, charsetid, charsetform, fsprecision,
                lfprecision, charlen, tflags, typesyn) AS
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name, v$.charsetid, v$.charsetform, v$.fsprecision,
                v$.lfprecision, v$.charlen, NVL(ct$.flags,0), NULL
        FROM    sys.exu8col_temp_tts_unused_col v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$
        WHERE   ((BITAND(v$.colprop, 32768) = 32768 AND /* unused col */
                  BITAND(v$.colprop, 1) != 1) OR        /* NOT ADT attr column */ 
                 (BITAND(v$.colprop, 32) != 32 OR       /* not a hidden column */
                 BITAND(v$.colprop, 1048608)= 1048608 OR/*snapshot hidden col*/
                 BITAND (v$.colprop, 4194304) = 4194304)) AND/* RLS hidden col*/
                v$.tobjid = c$.obj# (+) AND
                v$.intcolid = c$.intcol# (+) AND
                v$.tobjid = ct$.obj# (+) AND
                v$.intcolid = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#,13) = 13 AND
                ct$.synobj# IS NULL
      UNION ALL
        SELECT  tobjid, towner, townerid, v$.tname, v$.name, v$.length,
                v$.precision, v$.scale, v$.type, v$.isnull, v$.conname,
                v$.colid, v$.intcolid, v$.segcolid, v$.comment$, default$,
                v$.dfltlen, v$.enabled, v$.defer, v$.flags, v$.colprop,
                o$.name, u$.name, v$.charsetid, v$.charsetform, 
                v$.fsprecision, v$.lfprecision, v$.charlen, NVL(ct$.flags,0),
                so$.name
        FROM    sys.exu8col_temp_tts_unused_col v$, sys.col$ c$, sys.coltype$ ct$,
                sys.obj$ o$, sys.user$ u$, sys.obj$ so$
        WHERE   ((BITAND(v$.colprop, 32768) = 32768 AND /* unused col */
                  BITAND(v$.colprop, 1) != 1) OR        /* NOT ADT attr column */
                (BITAND(v$.colprop, 32) != 32 OR        /* not a hidden column */
                 BITAND(v$.colprop, 1048608)= 1048608 OR/*snapshot hidden col*/
                 BITAND (v$.colprop, 4194304) = 4194304)) AND/* RLS hidden col*/
                v$.tobjid = c$.obj# (+) AND
                v$.intcolid = c$.intcol# (+) AND
                v$.tobjid = ct$.obj# (+) AND
                v$.intcolid = ct$.intcol# (+) AND
                NVL(ct$.toid, HEXTORAW('00')) = o$.oid$ (+) AND
                NVL(o$.owner#, -1) = u$.user# (+) AND
                NVL(o$.type#,13) = 13 AND so$.obj# = ct$.synobj#
/
GRANT SELECT ON sys.exu9coo_tts_unused_col TO SELECT_CATALOG_ROLE;

REM
REM current user's columns
REM
CREATE OR REPLACE VIEW exu9coou AS
        SELECT  *
        FROM    sys.exu9coo
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9coou TO PUBLIC;

REM
REM view to access column comments for extent table, inner nested tables
REM and extent views
REM
CREATE OR REPLACE VIEW exu8cmt (
                userid, objid, colno, colname, cmnt) AS
        SELECT  o$.owner#, cm$.obj#, cm$.col#, c$.name, cm$.comment$
        FROM    sys.com$ cm$, sys.obj$ o$, sys.col$ c$
        WHERE   o$.obj# = cm$.obj# AND
                c$.obj# = cm$.obj# AND
                c$.intcol# = cm$.col#
/
GRANT SELECT ON sys.exu8cmt TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8cmtu AS
        SELECT  *
        FROM    sys.exu8cmt
        WHERE   userid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8cmtu TO PUBLIC;

REM
REM analyze statistics for columns (except for samples)
REM
CREATE OR REPLACE VIEW exu8asc (
                tobjid, pobjid, townerid, colname, intcol, distcount, lowval,
                hival, density, nullcount, avgcln, cflags) AS
        SELECT  c$.obj#, hh$.obj#, o$.owner#, c$.name, hh$.intcol#, 
                hh$.distcnt, 
                case when SYS_OP_DV_CHECK(o$.name, o$.owner#) = 1 
                     then hh$.lowval
                     else null
                end,
                case when SYS_OP_DV_CHECK(o$.name, o$.owner#) = 1
                     then hh$.hival
                     else null
                end,
                hh$.density, hh$.null_cnt,
                hh$.avgcln, hh$.spare2
        FROM    sys."_HIST_HEAD_DEC" hh$, sys.obj$ o$, sys.obj$ ot$, sys.col$ c$
        WHERE   hh$.obj# = o$.obj# AND
                c$.obj# = ot$.obj# AND
                o$.owner# = ot$.owner# AND
                hh$.intcol# = c$.intcol#
/
GRANT SELECT ON sys.exu8asc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8ascu AS
        SELECT  *
        FROM    sys.exu8asc
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8ascu TO PUBLIC;

REM
REM analyze statistics for columns (except for samples) v10
REM
CREATE OR REPLACE VIEW exu10asc (
                tobjid, pobjid, townerid, colname, intcol, distcount, lowval,
                hival, density, nullcount, avgcln, cflags, property) AS
        SELECT  c$.obj#, hh$.obj#, o$.owner#, REPLACE(c$.name, '''', ''''''),
                hh$.intcol#, hh$.distcnt, 
                case when SYS_OP_DV_CHECK(o$.name, o$.owner#) = 1
                     then hh$.lowval
                     else null
                end,
                case when SYS_OP_DV_CHECK(o$.name, o$.owner#) = 1
                     then hh$.hival
                     else null
                end,
                hh$.density, hh$.null_cnt,
                hh$.avgcln, hh$.spare2, c$.property
        FROM    sys."_HIST_HEAD_DEC" hh$, sys.obj$ o$, sys.obj$ ot$, sys.col$ c$
        WHERE   hh$.obj# = o$.obj# AND
                c$.obj# = ot$.obj# AND
                o$.owner# = ot$.owner# AND
                hh$.intcol# = c$.intcol#
/
GRANT SELECT ON sys.exu10asc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu10ascu AS
        SELECT  *
        FROM    sys.exu10asc
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu10ascu TO PUBLIC;

REM
REM histogram samples for analyze statistics
REM
CREATE OR REPLACE VIEW exu8hst (
                pobjid, townerid, intcol, bucket, endpthash, endptval) AS
        SELECT  h$.obj#, o$.owner#, h$.intcol#, h$.bucket,
                case when SYS_OP_DV_CHECK(o$.name, o$.owner#) = 1
                     then h$.endpoint
                     else null
                end,
                case when SYS_OP_DV_CHECK(o$.name, o$.owner#) = 1
                     then h$.epvalue
                     else null
                end
        FROM    sys."_HISTGRM_DEC" h$, sys.obj$ o$
        WHERE   h$.obj# = o$.obj#
      UNION ALL
        SELECT  h$.obj#, o$.owner#, h$.intcol#, 0, 
                case when SYS_OP_DV_CHECK(o$.name, o$.owner#) = 1
                     then h$.minimum
                     else null
                end, 
                NULL
        FROM    sys."_HIST_HEAD_DEC" h$, sys.obj$ o$
        WHERE   h$.obj# = o$.obj# AND
                h$.bucket_cnt = 1
      UNION ALL
        SELECT  h$.obj#, o$.owner#, h$.intcol#, 1, 
                case when SYS_OP_DV_CHECK(o$.name, o$.owner#) = 1
                     then h$.maximum
                     else null
                end, 
                NULL
        FROM    sys."_HIST_HEAD_DEC" h$, sys.obj$ o$
        WHERE   h$.obj# = o$.obj# AND
                h$.bucket_cnt = 1
/
GRANT SELECT ON sys.exu8hst TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8hstu AS
        SELECT  *
        FROM    sys.exu8hst
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8hstu TO PUBLIC;

REM
REM all columns for index
REM
CREATE OR REPLACE VIEW exu8ico (
                tobjid, towner, townerid, tname, name, btname, colid, colnum,
                property, bobjid, function, funclen) AS
        SELECT  io$.obj#, u$.name, io$.owner#, io$.name,
                DECODE(BITAND(c$.property, 1), 1, a$.name, c$.name), to$.name,
                ic$.pos#,
                DECODE(BITAND(i$.property, 1024), 0, i$.cols, i$.intcols),
                c$.property, ic$.bo#, c$.default$, c$.deflength
        FROM    sys.col$ c$, sys.icol$ ic$, sys.obj$ io$, sys.user$ u$,
                sys.attrcol$ a$, sys.obj$ to$, sys.ind$ i$
        WHERE   c$.obj# = ic$.bo# AND
                ((BITAND(i$.property, 1024) = 1024 AND
                  c$.intcol# = ic$.spare2) OR
                 ((NOT (BITAND(i$.property, 1024) = 1024)) AND
                 c$.intcol# = ic$.intcol#)) AND
                ic$.obj# = io$.obj# AND
                io$.owner# = u$.user# AND
                i$.bo# = to$.obj# AND
                i$.obj# = io$.obj# AND
                c$.obj# = a$.obj# (+) AND
                c$.intcol# = a$.intcol# (+) AND
                (userenv('SCHEMAID') = 0 OR (userenv('SCHEMAID') = io$.owner# AND
                                 userenv('SCHEMAID') = to$.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu8ico TO PUBLIC;

REM
REM current user's index columns
REM
CREATE OR REPLACE VIEW exu8icou AS
        SELECT  *
        FROM    sys.exu8ico
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8icou TO PUBLIC;

REM
REM FROM tables for bitmap join index
REM
CREATE OR REPLACE VIEW exu9bjf (
                iobjid, tabname, towner, tobjid) AS
        SELECT  io$.obj#, to$.name, u$.name, to$.obj#
        FROM    sys.jijoin$ ji$, sys.obj$ to$, sys.user$ u$, sys.obj$ io$
        WHERE   to$.obj# IN (ji$.tab1obj#, ji$.tab2obj#) AND
                to$.owner# = u$.user# AND
                ji$.obj# = io$.obj# AND
                (userenv('SCHEMAID') IN (0, io$.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
        GROUP BY io$.obj#, to$.name, u$.name, to$.obj#
/
GRANT READ ON sys.exu9bjf TO PUBLIC;

REM
REM Equijoin list for bitmap join index
REM
CREATE OR REPLACE VIEW exu9bjw (
                iobjid, col1name, t1objid, col2name, t2objid) AS
        SELECT  ji$.obj#, c1$.name, ji$.tab1obj#, c2$.name, ji$.tab2obj#
        FROM    sys.jijoin$ ji$, sys.col$ c1$, sys.col$ c2$, sys.obj$ io$
        WHERE   ji$.tab1col# = c1$.intcol# AND
                ji$.tab1obj# = c1$.obj# AND
                ji$.tab2col# = c2$.intcol# AND
                ji$.tab2obj# = c2$.obj# AND
                ji$.obj# = io$.obj# AND
                (userenv('SCHEMAID') IN (0, io$.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9bjw TO PUBLIC;

REM
REM all users' default roles
REM
CREATE OR REPLACE VIEW exu8dfr (
                name, userid, role, roleid) AS
        SELECT  u$.name, u$.user#, u1$.name, u1$.user#
        FROM    sys.user$ u$, sys.user$ u1$, sys.defrole$ d$
        WHERE   u$.user# = d$.user# AND
                u1$.user# = d$.role#
/
GRANT SELECT ON sys.exu8dfr TO SELECT_CATALOG_ROLE;

REM
REM all roles - enumerate all roles
REM
CREATE OR REPLACE VIEW exu8rol (
                role, password) AS
        SELECT  name, password
        FROM    sys.user$
        WHERE   type# = 0 AND
                name NOT IN ('CONNECT', 'RESOURCE', 'DBA', 'PUBLIC',
                             '_NEXT_USER', 'EXP_FULL_DATABASE',
                             'IMP_FULL_DATABASE')
/
GRANT SELECT ON sys.exu8rol TO SELECT_CATALOG_ROLE;

REM
REM all role grants
REM
CREATE OR REPLACE VIEW exu8rlg (
                grantee, granteeid, role, roleid, admin, sequence) AS
        SELECT  u1$.name, u1$.user#, u2$.name, u2$.user#, NVL(g$.option$, 0),
                g$.sequence#
        FROM    sys.user$ u1$, sys.user$ u2$, sys.sysauth$ g$
        WHERE   u1$.user# = g$.grantee# AND
                u2$.user# = g$.privilege# AND
                g$.privilege# > 0 AND
                u1$.name NOT IN ('ORDSYS',  'MDSYS', 'CTXSYS', 'ORDPLUGINS',
                                'LBACSYS', 'XDB',   'SI_INFORMTN_SCHEMA',
                                'DIP',  'DBSNMP', 'EXFSYS', 'WMSYS',
                                'ORACLE_OCM', 'ANONYMOUS', 'XS$NULL',
                                'APPQOSSYS', 'OJVMSYS', 'SYSBACKUP', 'SYSDG', 
                                'SYSRAC', 'SYSKM', 'DVSYS', 'DVF', 'DBHADOOP', 'ORDDATA',
                                'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                                'LOGSTDBY_ADMINISTRATOR', 'OLAPSYS',
                                'FLOWS_FILES','APEX_040200','APEX_050000','GGSYS')
/
GRANT SELECT ON sys.exu8rlg TO SELECT_CATALOG_ROLE;

REM
REM all system privs, type is 1 for user, 0 for role
REM
CREATE OR REPLACE VIEW exu8spv (
                grantee, granteeid, priv, wgo, sequence) AS
        SELECT  u1$.name, u1$.user#, m$.name, NVL(a$.option$, 0), a$.sequence#
        FROM    sys.sysauth$ a$, sys.system_privilege_map m$, sys.user$ u1$
        WHERE   a$.grantee# = u1$.user# AND
                a$.privilege# = m$.privilege AND
                BITAND(m$.property, 1) != 1 AND
                u1$.name NOT IN ('CONNECT', 'RESOURCE', 'DBA', '_NEXT_USER',
                                 'EXP_FULL_DATABASE', 'IMP_FULL_DATABASE',
                                 'ORDSYS', 'MDSYS', 'CTXSYS', 'ORDPLUGINS',
                                 'LBACSYS', 'XDB', 'SI_INFORMTN_SCHEMA',
                                 'DIP', 'DBSNMP', 'EXFSYS', 'WMSYS',
                                 'ORACLE_OCM', 'ANONYMOUS', 'XS$NULL',
                                 'APPQOSSYS', 'OJVMSYS', 'SYSBACKUP', 'SYSDG', 
                                 'SYSRAC', 'SYSKM', 'DVSYS', 'DVF', 'ORDDATA',
                                 'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                                 'LOGSTDBY_ADMINISTRATOR', 'DBHADOOP',
                                 'OLAPSYS', 'FLOWS_FILES', 'APEX_040200',
                                 'APEX_050000','GGSYS')
/
GRANT SELECT ON sys.exu8spv TO SELECT_CATALOG_ROLE;

REM
REM all grants
REM
CREATE OR REPLACE VIEW exu8grn (
                objid, grantor, grantorid, grantee, priv, who, wgo, creatorid,
                sequence, isdir, type) AS
        SELECT  t$.obj#, ur$.name, t$.grantor#, ue$.name, m$.name,
                MOD(NVL(t$.option$/2, 0), 2), MOD(NVL(t$.option$, 0), 2),
                o$.owner#, t$.sequence#,
                DECODE ((o$.type#), 23, 1, 0), o$.type#  
        FROM    sys.objauth$ t$, sys.obj$ o$, sys.user$ ur$,
                sys.table_privilege_map m$, sys.user$ ue$
        WHERE   o$.obj# = t$.obj# AND
                t$.privilege# = m$.privilege AND
                t$.col# IS NULL AND
                t$.grantor# = ur$.user# AND
                t$.grantee# = ue$.user# AND
                ue$.name NOT IN ('ORDSYS',  'MDSYS', 'CTXSYS', 'ORDPLUGINS',
                                 'LBACSYS', 'XDB',   'SI_INFORMTN_SCHEMA',
                                 'DIP',   'DBSNMP', 'EXFSYS', 'WMSYS',
                                 'ORACLE_OCM', 'ANONYMOUS', 'XS$NULL',
                                 'APPQOSSYS', 'OJVMSYS', 'SYSBACKUP', 'SYSDG', 
                                 'SYSRAC', 'SYSKM', 'DVSYS', 'DVF', 'ORDDATA',
                                 'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                                 'LOGSTDBY_ADMINISTRATOR', 'DBHADOOP',
                                 'OLAPSYS', 'FLOWS_FILES', 'APEX_040200',
                                 'APEX_050000','GGSYS')
/
GRANT SELECT ON sys.exu8grn TO SELECT_CATALOG_ROLE;

REM
REM just SYS's grants
REM
CREATE OR REPLACE VIEW exu8grs (
                objid, name) AS
        SELECT  t$.obj#, o$.name
        FROM    sys.objauth$ t$, sys.obj$ o$
        WHERE   o$.obj# = t$.obj# AND
                t$.col# IS NULL AND
                t$.grantor# = 0 AND
                o$.type# NOT IN (
                    SELECT  type#
                    FROM    sys.exppkgobj$)
/
GRANT SELECT ON sys.exu8grs TO SELECT_CATALOG_ROLE;

REM
REM first level grants
REM
CREATE OR REPLACE VIEW exu8grnu AS
        SELECT  *
        FROM    sys.exu8grn
        WHERE   grantorid = userenv('SCHEMAID') AND
                creatorid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8grnu TO PUBLIC;

REM
REM all column grants
REM
CREATE OR REPLACE VIEW exu8cgr (
                objid, grantor, grantorid, grantee, creatorid, cname, priv,
                sequence, wgo) AS
        SELECT  c$.obj#, ur$.name, c$.grantor#, ue$.name, o$.owner#, cl$.name,
                m$.name, c$.sequence#, MOD(NVL(c$.option$, 0), 2)
        FROM    sys.objauth$ c$, sys.obj$ o$, sys.user$ ur$, sys.user$ ue$,
                sys.table_privilege_map m$, sys.col$ cl$
        WHERE   c$.grantor# = ur$.user# AND
                c$.grantee# = ue$.user# AND
                c$.obj# = o$.obj# AND
                c$.privilege# = m$.privilege AND
                c$.obj# = cl$.obj# AND
                c$.col# = cl$.col#
/
GRANT SELECT ON sys.exu8cgr TO SELECT_CATALOG_ROLE;

REM
REM first level grants
REM
CREATE OR REPLACE VIEW exu8cgru AS
        SELECT  *
        FROM    sys.exu8cgr
        WHERE   grantorid = userenv('SCHEMAID') AND
                creatorid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8cgru TO PUBLIC;

REM
REM all indexes. This view is used for TRANSPORTABLE TABLESPACEs,
REM V11.0 and higher
REM
CREATE OR REPLACE VIEW exu11ind_base (
                iobjid, idobjid, iname, iowner, iownerid, ispace, itsno,
                ifileno, iblockno, btname, btobjid, btowner, btownerid,
                btproperty, btclusterflag, property, cluster$, pctfree$,
                initrans, maxtrans, blevel, bitmap, deflog, tsdeflog, degree,
                instances, type, rowcnt, leafcnt, distkey, lblkkey, dblkkey,
                clufac, preccnt, iflags, sysgenconst) AS
        SELECT  i$.obj#, i$.dataobj#, i$.name, ui$.name, i$.owner#, ts$.name,
                ind$.ts#, ind$.file#, ind$.block#, t$.name, t$.obj#, ut$.name,
                t$.owner#, NVL(tb$.property, 0), NVL(tb$.bobj#, 0),
                ind$.property, DECODE(t$.type#, 3, 1, 0), ind$.pctfree$,
                ind$.initrans, ind$.maxtrans, NVL(ind$.blevel, -1),
                DECODE(ind$.type#, 2, 1, 0),
                DECODE(BITAND(ind$.flags, 4), 4, 1, 0), ts$.dflogging,
                NVL(ind$.degree, 1), NVL(ind$.instances, 1), ind$.type#,
                NVL(ind$.rowcnt, -1), NVL(ind$.leafcnt, -1),
                NVL(ind$.distkey, -1), NVL(ind$.lblkkey, -1),
                NVL(ind$.dblkkey, -1), NVL(ind$.clufac, -1),
                NVL(ind$.spare2, 0), ind$.flags,
                DECODE(BITAND(i$.flags, 4), 4, 1, 0)
        FROM    sys.obj$ t$, sys.obj$ i$, sys.ind$ ind$, sys.user$ ui$,
                sys.user$ ut$, sys.ts$ ts$, sys.tab$ tb$
        WHERE   ind$.bo# = t$.obj# AND
                ind$.obj# = i$.obj# AND
                ind$.bo# = tb$.obj# (+) AND
                ts$.ts# = ind$.ts# AND
                i$.owner# = ui$.user# AND
                t$.owner# = ut$.user# AND
                BITAND(ind$.flags, 4096) = 0 AND          /* skip fake index */
                (userenv('SCHEMAID') = 0 OR (userenv('SCHEMAID') = i$.owner# AND
                                 userenv('SCHEMAID') = t$.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu11ind_base TO PUBLIC;

CREATE OR REPLACE VIEW exu10ind_base (
                iobjid, idobjid, iname, iowner, iownerid, ispace, itsno,
                ifileno, iblockno, btname, btobjid, btowner, btownerid,
                btproperty, btclusterflag, property, cluster$, pctfree$,
                initrans, maxtrans, blevel, bitmap, deflog, tsdeflog, degree,
                instances, type, rowcnt, leafcnt, distkey, lblkkey, dblkkey,
                clufac, preccnt, iflags, sysgenconst) AS
        SELECT iobjid, idobjid, iname, iowner, iownerid, ispace, itsno,
                ifileno, iblockno, btname, btobjid, btowner, btownerid,
                btproperty, btclusterflag, property, cluster$, pctfree$,
                initrans, maxtrans, blevel, bitmap, deflog, tsdeflog, degree,
                instances, type, rowcnt, leafcnt, distkey, lblkkey, dblkkey,
                clufac, preccnt, iflags, sysgenconst
        FROM sys.exu11ind_base e$
        WHERE  BITAND(e$.property, 8208) != 8208       /* skip Fn Ind on MV */
/
GRANT READ ON sys.exu10ind_base TO PUBLIC;

REM
REM all indexes. This view is the base view used by V9.0 and higher
REM
CREATE OR REPLACE VIEW exu9ind_base AS
        SELECT  * 
        FROM    sys.exu10ind_base
        WHERE   type != 8 AND                        /* skip LOB index */
                type != 4                            /* skip IOT top */
/
GRANT READ ON sys.exu9ind_base TO PUBLIC;

REM 
REM 
REM
CREATE OR REPLACE VIEW exu81ind_base AS
        SELECT  *
        FROM    sys.exu9ind_base
        WHERE   sysgenconst = 0
/
GRANT READ ON sys.exu81ind_base TO PUBLIC;


REM
REM exu11ind is defined in the same manner as exu9ind; please
REM refer to that for comments. 
REM
CREATE OR REPLACE VIEW exu11ind AS
        SELECT  *
        FROM    sys.exu11ind_base
        WHERE   NOT EXISTS (
                    SELECT  *
                    FROM    sys.con$ c$, sys.cdef$ cd$
                    WHERE   c$.name = iname AND   /* same name as constraint */
                            c$.owner# = iownerid AND
                            c$.con# = cd$.con# AND
                            NVL(cd$.enabled, 0) = iobjid AND  /* cons enable */
                            (cd$.intcols = 1 AND           /* single column */
                             EXISTS (
                                SELECT  *
                                FROM    sys.ccol$ cc$, sys.col$ co$
                                WHERE   cc$.con# = c$.con# AND
                                        co$.obj# = cc$.obj# AND
                                        co$.intcol# = cc$.intcol# AND
                                        BITAND(co$.property, 2) = 2)))
/
GRANT READ ON sys.exu11ind TO PUBLIC;

REM
REM exu9ind is derived from base view to eliminate indexes completely
REM defined by constraint or OIDINDEX declarations.
REM Selects any indices which do NOT correspond to constraints (same name)
REM which are enabled -and- represent an OID INDEX constraint
REM                               (single constr. col is OID).
REM  (allows non-system-defined indices due to constraints,
REM   except when the base table is IOT??).
REM Reference bugs: 686272, 735699
REM
CREATE OR REPLACE VIEW exu9ind AS
        SELECT  *
        FROM    sys.exu9ind_base
        WHERE   NOT EXISTS (
                    SELECT  *
                    FROM    sys.con$ c$, sys.cdef$ cd$
                    WHERE   c$.name = iname AND   /* same name as constraint */
                            c$.owner# = iownerid AND
                            c$.con# = cd$.con# AND
                            NVL(cd$.enabled, 0) = iobjid AND  /* cons enable */
                            (cd$.intcols = 1 AND           /* single column */
                             EXISTS (
                                SELECT  *
                                FROM    sys.ccol$ cc$, sys.col$ co$
                                WHERE   cc$.con# = c$.con# AND
                                        co$.obj# = cc$.obj# AND
                                        co$.intcol# = cc$.intcol# AND
                                        BITAND(co$.property, 2) = 2)))
/
GRANT READ ON sys.exu9ind TO PUBLIC;

REM
REM all indexes. This view is used by V8.1 and higher since it retrieves
REM functional and domain indexes which are unknown in V8.0
REM
CREATE OR REPLACE VIEW exu81ind AS
        SELECT  *
        FROM    sys.exu9ind
        WHERE   sysgenconst = 0 AND
                BITAND(property, 1) = 0 OR                     /* not unique */
                NOT EXISTS (
                    SELECT  *
                    FROM    sys.con$ c$, sys.cdef$ cd$
                    WHERE   c$.name = iname AND   /* same name as constraint */
                            c$.owner# = iownerid AND
                            c$.con# = cd$.con# AND
                            NVL(cd$.enabled, 0) = iobjid AND  /* cons enable */
                            ((BITAND(cd$.defer, 8) = 8)))       /* sys gen'd */
/
GRANT READ ON sys.exu81ind TO PUBLIC;

REM
REM all indexes for V8.0. This view filters out V8.1 and later index types not
REM supported in V8.0
REM
CREATE OR REPLACE VIEW exu8ind AS
        SELECT  *
        FROM    sys.exu81ind
        WHERE   BITAND(property, 16) != 16 AND      /* skip functional index */
                type != 9                               /* skip domain index */
/
GRANT SELECT ON sys.exu8ind TO SELECT_CATALOG_ROLE;

REM
REM current user indexes for V8.0
REM
CREATE OR REPLACE VIEW exu8indu AS
        SELECT  *
        FROM    sys.exu8ind
/
GRANT READ ON sys.exu8indu TO PUBLIC;

REM
REM Additional information required for domain indexes:
REM indextype name & owner, implementation type name & owner, and params
REM (params are spare4 in idx$)
REM "1" connections are for the index itself, "2" connections are for the
REM assoc. indextype, and  "3" for the assoc. implementation type.
REM iversion = domain index version (added in 9.0)
REM iproperty = the properties of domain index
REM gmflags = number (flags) passed to getindexmetadata, setup based on def.
REM           of flags argument in catodci.sql.
REM           Export may set transportable bit but otherwise does not
REM           view the composed value.
REM
CREATE OR REPLACE VIEW exu9doi (
                iobjid, iownerid, iparams, itname, itowner, implname,
                implowner, diversion, iproperty, gmflags)
      AS
        SELECT  ind$.obj#, indo$.owner#, ind$.spare4, o2$.name, u2$.name,
                o3$.name, u3$.name, it$.interface_version#, it$.property, 0
        FROM    sys.ind$ ind$, sys.obj$ indo$, sys.obj$ o2$, sys.obj$ o3$,
                sys.user$ u2$, sys.user$ u3$, sys.indtypes$ it$
        WHERE   ind$.type# = 9 AND                           /* Domain Index */
                ind$.indmethod# = it$.obj#  AND
                ind$.obj# = indo$.obj# AND
                it$.obj# = o2$.obj# AND
                it$.implobj# = o3$.obj# AND
                o2$.owner# = u2$.user# AND
                o3$.owner# = u3$.user# AND
                BITAND(ind$.property, 2) != 2                 /* partitioned */
      UNION ALL         /* Grab domain indexes that have partition info also */
        SELECT  ind$.obj#, indo$.owner#, ind$.spare4, o2$.name, u2$.name,
                o3$.name, u3$.name, it$.interface_version#, it$.property,
                DECODE(BITAND (ind$.property, 512), 512, 64,0)+/*0x200=iot di*/
                DECODE(BITAND(po$.flags, 1), 1, 1, 0) +         /* 1 = local */
                DECODE(po$.parttype, 1, 2, 2, 4, 0)   /* 1 = range, 2 = hash */
        FROM    sys.ind$ ind$, sys.obj$ indo$, sys.obj$ o2$, sys.obj$ o3$,
                sys.user$ u2$, sys.user$ u3$, sys.indtypes$ it$,
                sys.partobj$ po$
        WHERE   ind$.type# = 9 AND
                ind$.indmethod# = it$.obj# AND
                ind$.obj# = indo$.obj# AND
                it$.obj# = o2$.obj# AND
                it$.implobj# = o3$.obj# AND
                o2$.owner# = u2$.user# AND
                o3$.owner# = u3$.user# AND
                BITAND(po$.flags, 8) = 8 AND
                po$.obj# = ind$.obj# AND
                BITAND(ind$.property, 2) = 2                  /* partitioned */
/
GRANT SELECT ON sys.exu9doi TO SELECT_CATALOG_ROLE;

REM
REM Domain index info for current user
REM
CREATE OR REPLACE VIEW exu9doiu AS
        SELECT  *
        FROM    sys.exu9doi
        WHERE   iownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9doiu TO PUBLIC;

REM
REM The 81 view uses the 9.0 view and returns everything but the new
REM interface version
REM
CREATE OR REPLACE VIEW exu81doi AS
        SELECT  *
        FROM    sys.exu9doi
        WHERE   diversion = 1
/
GRANT SELECT ON sys.exu81doi TO SELECT_CATALOG_ROLE;

REM
REM Domain index info for current user
REM
CREATE OR REPLACE VIEW exu81doiu AS
        SELECT  *
        FROM    sys.exu81doi
        WHERE   iownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81doiu TO PUBLIC;

REM
REM V9.0 Get Domain Index secondary objects
REM
REM pi_obj = parent index object
REM c_obj = child secondary object
REM
CREATE OR REPLACE VIEW exu9doso (
                obj#, tablename, ownerid) AS
        SELECT  pi_obj.obj#, c_obj.name, c_obj.owner#
        FROM    sys.obj$ pi_obj, sys.obj$ c_obj, sys.user$ us2,
                sys.secobj$ secobj
        WHERE   pi_obj.obj# = secobj.obj# AND       /* has secondary objects */
                c_obj.obj# = secobj.secobj# AND /*object is secondary object */
                c_obj.owner# = us2.user#  AND /* secondary obj is same owner */
                c_obj.type# = 2 AND             /* Secondary Object is TABLE */
                BITAND(c_obj.flags, 128) != 128 AND
                (userenv('SCHEMAID') = 0 OR
                                (userenv('SCHEMAID') = pi_obj.owner# AND
                                 userenv('SCHEMAID') = us2.user#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9doso TO PUBLIC;

REM
REM V10.0 Get Domain Index secondary objects (including tablespace)
REM
REM pi_obj = parent index object
REM c_obj = child secondary object
REM
CREATE OR REPLACE VIEW exu10doso (
                obj#, tablename, ownerid, tablespace) AS
        SELECT  pi_obj.obj#, c_obj.name, c_obj.owner#, 
                /* decode below needed for ConText IOTs - copied from */
                /* USER_TABLES in catalog.sql */
                decode(bitand(tab.property, 2151678048), 0, ts.name, null)
        FROM    sys.obj$ pi_obj, sys.obj$ c_obj, sys.user$ us2,
                sys.secobj$ secobj, sys.tab$ tab, sys.ts$ ts
        WHERE   pi_obj.obj# = secobj.obj# AND       /* has secondary objects */
                c_obj.obj# = secobj.secobj# AND /*object is secondary object */
                c_obj.owner# = us2.user#  AND /* secondary obj is same owner */
                c_obj.type# = 2 AND             /* Secondary Object is TABLE */
                BITAND(c_obj.flags, 128) != 128 AND
                secobj.secobj# = tab.obj# AND
                tab.ts# = ts.ts# AND
                (userenv('SCHEMAID') = 0 OR
                                (userenv('SCHEMAID') = pi_obj.owner# AND
                                 userenv('SCHEMAID') = us2.user#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu10doso TO PUBLIC;

REM
REM Get Domain index Partition Info
REM
CREATE OR REPLACE VIEW exu9eip (
                objid, bobjid, ownerid, pname, partno, parameters) AS
        SELECT  o$.obj#, ip$.bo#, o$.owner#, o$.subname, ip$.part#,
                idpp$.parameters
        FROM    sys.obj$ o$, sys.indpart$ ip$, sys.indpart_param$ idpp$
        WHERE   o$.type# = 20 AND                       /* Partitioned Index */
                ip$.obj# = o$.obj# AND
                idpp$.obj# = o$.obj# AND
                (userenv('SCHEMAID') IN (0, o$.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9eip TO PUBLIC;

REM
REM Obtain all context binding info
REM
CREATE OR REPLACE VIEW exu81ctx (
                ctxname, shmname, pkgname, objno) AS
        SELECT  o$.name, c$.schema, c$.package, o$.obj#
        FROM    sys.exu81obj o$, sys.context$ c$
        WHERE   o$.type# = 44 AND                                 /* context */
                o$.obj# = c$.obj#
/
GRANT SELECT ON sys.exu81ctx TO SELECT_CATALOG_ROLE;

REM
REM Obtain all application role binding info
REM
CREATE OR REPLACE VIEW exu81approle (
                role, schema, package) AS
        SELECT  u$.name, r$.schema, r$.package
        FROM    sys.user$ u$, sys.approle$ r$
        WHERE   u$.user# = r$.role#
/
GRANT SELECT ON sys.exu81approle TO SELECT_CATALOG_ROLE;

REM
REM TEST FOR TRUSTED ORACLE
REM
CREATE OR REPLACE VIEW exu816tctx (
                cols) AS
        SELECT  cols
        FROM    sys.tab$ t, sys.obj$ o
        WHERE   t.obj# = o.obj# AND
                o.name = 'CONTEXT$' AND
                o.type# = 2 AND
                o.owner# = 0
/
GRANT SELECT ON sys.exu816tctx TO SELECT_CATALOG_ROLE;

REM
REM CREATE EXPORT VIEW
REM
CREATE OR REPLACE VIEW exu816ctx (
                ctxname, shmname, pkgname, flags) AS
        SELECT  o$.name, c$.schema, c$.package, c$.flags
        FROM    sys.exu81obj o$, sys.context$ c$
        WHERE   o$.type# = 44 AND
                o$.obj# = c$.obj#
/
GRANT SELECT ON sys.exu816ctx TO SELECT_CATALOG_ROLE;

REM
REM dependency order -- only used for ordering operators
REM
CREATE OR REPLACE VIEW exu8ordop (
                dlevel, obj#, d_owner#) AS
        SELECT                                              /*+ no_filtering */
                MAX(level), d1.d_obj#, d1.owner#
        FROM    (
                    SELECT                                      /*+ no_merge */
                            d.d_obj#, d.p_obj#, v.owner#
                    FROM    sys.dependency$ d,
                    (select obj#, owner# from sys.obj$ where type#=33) v
                    WHERE   v.obj# = d.d_obj#) d1
        CONNECT BY PRIOR d1.d_obj# = d1.p_obj#
        GROUP BY d1.d_obj#, d1.owner#
/
GRANT READ ON sys.exu8ordop TO PUBLIC;

REM
REM dependency order -- only used for ordering views
REM
CREATE OR REPLACE VIEW exu8ord (
                dlevel, obj#, d_owner#) AS
        SELECT                                              /*+ no_filtering */
                MAX(level), d1.d_obj#, d1.owner#
        FROM    (
                    SELECT                                      /*+ no_merge */
                            d.d_obj#, d.p_obj#, v.owner#
                    FROM    sys.dependency$ d,
                    (select obj#, owner# from sys.obj$ where type#=4) v
                    WHERE   v.obj# = d.d_obj#) d1
        CONNECT BY NOCYCLE PRIOR d1.d_obj# = d1.p_obj#
        GROUP BY d1.d_obj#, d1.owner#
/
GRANT READ ON sys.exu8ord TO PUBLIC;

REM
REM current user's dependency order of views
REM
CREATE OR REPLACE VIEW exu8ordu AS
        SELECT  *
        FROM    sys.exu8ord
        WHERE   d_owner# = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8ordu TO PUBLIC;

REM
REM all views
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8vew (
                vobjid, vname, vtext, vowner, vownerid, vaudit, vcomment,
                vcname, vlevel, property, defer, flags, oidlen, oidclause,
                typeowner, typename, vlen, sqlver, underlen, underclause) AS
        SELECT  o$.obj#, o$.name, v$.text, u$.name, o$.owner#, v$.audit$,
                com$.comment$, c$.name, d$.dlevel, v$.property,
                NVL(cd$.defer, 0), NVL(o$.flags, 0), NVL(vt$.oidtextlength, 0),
                vt$.oidtext, vt$.typeowner, vt$.typename, v$.textlength,
                sv$.sql_version, NVL(vt$.undertextlength, 0), vt$.undertext
        FROM    sys.exu81obj o$, sys.view$ v$, sys.user$ u$, sys.cdef$ cd$,
                sys.con$ c$, sys.com$ com$, sys.exu8ord d$,
                sys.typed_view$ vt$, sys.exu816sqv sv$
        WHERE   v$.obj# = o$.obj# AND
                o$.owner# = u$.user# AND
                o$.obj# = cd$.obj#(+) AND
                cd$.con# = c$.con#(+) AND
                o$.obj# = com$.obj#(+) AND
                com$.col#(+) IS NULL AND
                o$.obj# = d$.obj#(+) AND
                v$.obj# = vt$.obj# (+) AND
                o$.spare1 = sv$.version# (+)
/
GRANT SELECT ON sys.exu8vew TO SELECT_CATALOG_ROLE;

REM
REM views for incremental export: new or last export not valid
REM cannot use union as in exutabi because of long field
REM
CREATE OR REPLACE VIEW exu8vewi AS
        SELECT  vw.*
        FROM    sys.exu8vew vw, sys.incexp i, sys.incvid v
        WHERE   i.name(+) = vw.vname AND
                i.owner#(+) = vw.vownerid AND
                v.expid < NVL(i.expid, 9999) AND
                NVL(i.type#, 4) = 4
/
GRANT SELECT ON sys.exu8vewi TO SELECT_CATALOG_ROLE;

REM
REM views for cumulative export: new, last export was inc or not valid
REM
CREATE OR REPLACE VIEW exu8vewc AS
        SELECT  vw.*
        FROM    sys.exu8vew vw, sys.incexp i, sys.incvid v
        WHERE   vw.vname = i.name(+) AND
                vw.vownerid = i.owner#(+) AND
                NVL(i.type#, 4) = 4 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 v.expid < NVL(i.expid, 9999))
/
GRANT SELECT ON sys.exu8vewc TO SELECT_CATALOG_ROLE;

REM
REM current user's view
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8vewu (
                vobjid, vname, vtext, vowner, vownerid, vaudit, vcomment,
                vcname, vlevel, property, defer, flags, oidlen, oidclause,
                typeowner, typename, vlen, sqlver, underlen, underclause) AS
        SELECT  o$.obj#, o$.name, v$.text, u$.name, o$.owner#, v$.audit$,
                com$.comment$, c$.name, d$.dlevel, v$.property,
                NVL(cd$.defer, 0), NVL(o$.flags, 0), NVL(vt$.oidtextlength, 0),
                vt$.oidtext, vt$.typeowner, vt$.typename, v$.textlength,
                sv$.sql_version, NVL(vt$.undertextlength, 0), vt$.undertext
        FROM    sys.exu81obj o$, sys.view$ v$, sys.user$ u$, sys.cdef$ cd$,
                sys.con$ c$, sys.com$ com$, sys.exu8ordu d$,
                sys.typed_view$ vt$, sys.exu816sqv sv$
        WHERE   v$.obj# = o$.obj# AND
                o$.owner# = u$.user# AND
                o$.obj# = cd$.obj#(+) AND
                cd$.con# = c$.con#(+) AND
                o$.obj# = com$.obj#(+) AND
                com$.col#(+) IS NULL AND
                o$.obj# = d$.obj#(+) AND
                v$.obj# = vt$.obj#(+) AND
                u$.user# = userenv('SCHEMAID') AND
                o$.spare1 = sv$.version# (+)
/
GRANT READ ON sys.exu8vewu TO PUBLIC;

REM
REM get dependency info for views that depend on other views
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vdpt (
                parent, child, powner, cowner) AS
        SELECT  d$.p_obj#, d$.d_obj#, o1$.owner#, o2$.owner#
        FROM    sys.dependency$ d$, sys.obj$ o1$, sys.obj$ o2$, sys.view$ v1$,
                sys.view$ v2$
        WHERE   d$.p_obj# = v1$.obj# AND
                v1$.obj# = o1$.obj# AND
                d$.d_obj# = v2$.obj# AND
                v2$.obj# = o2$.obj#
/
GRANT SELECT ON sys.exu8vdpt TO SELECT_CATALOG_ROLE;

REM
REM get dependency info for views that depend on other views
REM for current user
REM note, that even if user does not have privs, we need to
REM include views of other other users, to get the proper ordering.
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vdptu AS
        SELECT  *
        FROM    sys.exu8vdpt
/
GRANT READ ON sys.exu8vdptu TO PUBLIC;

REM
REM get all information about a given view
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vinf (
                vobjid, vname, vtext, vowner, vownerid, vaudit, vcomment,
                vcname, property, defer, flags, oidlen, oidclause, typeowner,
                typename, vlen) AS
        SELECT  o$.obj#, o$.name, v$.text, u$.name, o$.owner#, v$.audit$,
                com$.comment$, c$.name, v$.property, NVL(cd$.defer, 0),
                NVL(o$.flags, 0), NVL(vt$.oidtextlength, 0), vt$.oidtext,
                vt$.typeowner, vt$.typename, v$.textlength
        FROM    sys.obj$ o$, sys.view$ v$, sys.user$ u$, sys.cdef$ cd$,
                sys.con$ c$, sys.com$ com$, sys.typed_view$ vt$
        WHERE   v$.obj# = o$.obj# AND
                o$.owner# = u$.user# AND
                o$.obj# = cd$.obj#(+) AND
                cd$.con# = c$.con#(+) AND
                o$.obj# = com$.obj#(+) AND
                com$.col#(+) IS NULL AND
                v$.obj# = vt$.obj# (+)
/
GRANT SELECT ON sys.exu8vinf TO SELECT_CATALOG_ROLE;

REM
REM views for incremental export: new or last export not valid
REM cannot use union as in exutabi because of long field
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vinfi AS
        SELECT  vw.*
        FROM    sys.exu8vinf vw, sys.incexp i, sys.incvid v
        WHERE   i.name(+) = vw.vname AND
                i.owner#(+) = vw.vownerid AND
                v.expid < NVL(i.expid, 9999) AND
                NVL(i.type#, 4) = 4
/
GRANT SELECT ON sys.exu8vinfi TO SELECT_CATALOG_ROLE;

REM
REM views for cumulative export: new, last export was inc or not valid
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vinfc AS
        SELECT  vw.*
        FROM    sys.exu8vinf vw, sys.incexp i, sys.incvid v
        WHERE   vw.vname = i.name(+) AND
                vw.vownerid = i.owner#(+) AND
                NVL(i.type#, 4) = 4 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                v.expid < NVL(i.expid, 9999))
/
GRANT SELECT ON sys.exu8vinfc TO SELECT_CATALOG_ROLE;

REM
REM current user's view
REM
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vinfu AS
        SELECT  *
        FROM    sys.exu8vinf
        WHERE   vownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8vinfu TO PUBLIC;

REM
REM get all information about views with no dependent views
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vnc AS
        SELECT  *
        FROM    sys.exu8vinf vf$
        WHERE   NOT EXISTS (
                    SELECT  0
                    FROM    sys.exu8vdpt vd$
                    WHERE   vd$.parent = vf$.vobjid)
/
GRANT SELECT ON sys.exu8vnc TO SELECT_CATALOG_ROLE;

REM
REM views without dependent views for incremental export:
REM new or last export not valid
REM cannot use union as in exutabi because of long field
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vnci AS
        SELECT  vw.*
        FROM    sys.exu8vnc vw, sys.incexp i, sys.incvid v
        WHERE   i.name(+) = vw.vname AND
                i.owner#(+) = vw.vownerid AND
                v.expid < NVL(i.expid, 9999) AND
                NVL(i.type#, 4) = 4
/
GRANT SELECT ON sys.exu8vnci TO SELECT_CATALOG_ROLE;

REM
REM views without dependent views for cumulative export:
REM new, last export was inc or not valid
REM
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vncc AS
        SELECT  vw.*
        FROM    sys.exu8vnc vw, sys.incexp i, sys.incvid v
        WHERE   vw.vname = i.name(+) AND
                vw.vownerid = i.owner#(+) AND
                NVL(i.type#, 4) = 4 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                v.expid < NVL(i.expid, 9999))
/
GRANT SELECT ON sys.exu8vncc TO SELECT_CATALOG_ROLE;

REM
REM current user's views without dependent views
REM *** obsolete in 8.1.6 ***
REM
CREATE OR REPLACE VIEW exu8vncu AS
        SELECT  *
        FROM    sys.exu8vinfu vf$
        WHERE   NOT EXISTS (
                    SELECT  0
                    FROM    sys.exu8vdptu vd$
                    WHERE   vd$.parent = vf$.vobjid)
/
GRANT READ ON sys.exu8vncu TO PUBLIC;

REM
REM all synonyms (except those for TYPEs)
REM
REM Note: there can be synonyms for non existant objects

CREATE OR REPLACE VIEW exu9syn (
                synnam, synnam2, syntab, tabown, tabnode, public$, synown,
                synownid, tabownid, synobjno, syntime) AS
        SELECT  o$.name, o$.name, s$.name, s$.owner, s$.node,
                DECODE(o$.owner#, 1, 1, 0), uo$.name, o$.owner#, us$.user#,
                s$.obj#, o$.ctime
        FROM    sys.exu81obj o$, sys.syn$ s$, sys.user$ us$, sys.user$ uo$
        WHERE   s$.obj# = o$.obj# AND
                o$.owner# = uo$.user# AND
                s$.owner = us$.name(+) AND
                NVL(s$.owner, 'SYS') NOT IN
                   ('ORDSYS', 'MDSYS', 'CTXSYS', 'ORDPLUGINS', 'LBACSYS',
                    'XDB', 'SI_INFORMTN_SCHEMA', 'DIP',  'DBSNMP', 'EXFSYS',
                    'WMSYS','ORACLE_OCM', 'ANONYMOUS', 'XS$NULL',
                    'APPQOSSYS', 'OJVMSYS', 'SYSBACKUP', 'SYSDG', 'SYSRAC', 'SYSKM', 
                    'DVSYS', 'DVF', 'DBHADOOP', 'ORDDATA',
                    'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                    'LOGSTDBY_ADMINISTRATOR','OLAPSYS', 'FLOWS_FILES',
                    'APEX_050000','APEX_040200','GGSYS') AND
                NOT EXISTS (
                    SELECT obj#
                    FROM sys.obj$ ne
                    WHERE ne.name = s$.name AND
                          ne.owner# = us$.user# AND
                          ne.type# = 13 )
/
GRANT SELECT ON sys.exu9syn TO SELECT_CATALOG_ROLE;

REM
REM all PUBLIC TYPE Synonyms 
REM
CREATE OR REPLACE VIEW exu9pts (
                synnam, synnam2, syntab, tabown, tabnode, public$, synown,
                synownid, tabownid, synobjno, syntime) AS
        SELECT  o$.name, o$.name, s$.name, s$.owner, s$.node,
                DECODE(o$.owner#, 1, 1, 0), uo$.name, o$.owner#, us$.user#, 
                s$.obj#, o$.ctime
        FROM    sys.exu81obj o$, sys.syn$ s$, sys.user$ us$, sys.user$ uo$
        WHERE   s$.obj# = o$.obj# AND
                o$.owner# = uo$.user# AND
                s$.owner = us$.name(+) AND
                NVL(s$.owner, 'SYS') NOT IN
                   ('ORDSYS', 'MDSYS', 'CTXSYS', 'ORDPLUGINS', 'LBACSYS',
                    'XDB', 'SI_INFORMTN_SCHEMA', 'DIP',  'DBSNMP', 'EXFSYS', 
                    'WMSYS','ORACLE_OCM', 'ANONYMOUS', 'XS$NULL',
                    'APPQOSSYS', 'OJVMSYS', 'SYSBACKUP', 'SYSDG', 'SYSRAC', 'SYSKM', 
                    'DVSYS', 'DVF', 'DBHADOOP', 'ORDDATA',
                    'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                    'LOGSTDBY_ADMINISTRATOR', 'OLAPSYS', 'FLOWS_FILES',
                    'APEX_050000','APEX_040200','GGSYS') AND
                o$.owner# = 1 AND
                EXISTS (
                    SELECT obj#
                    FROM sys.obj$ e
                    WHERE e.name = s$.name AND
                          e.owner# = us$.user# AND
                          e.type# = 13 )
/
GRANT READ ON sys.exu9pts TO PUBLIC;

REM
REM User's TYPE Synonyms (non PUBLIC)
REM
CREATE OR REPLACE VIEW exu9uts (
                synnam, synnam2, syntab, tabown, tabnode, public$, synown,
                synownid, tabownid, synobjno, syntime) AS
        SELECT  o$.name, o$.name, s$.name, s$.owner, s$.node,
                DECODE(o$.owner#, 1, 1, 0), uo$.name, o$.owner#, us$.user#, 
                s$.obj#, o$.ctime
        FROM    sys.exu81obj o$, sys.syn$ s$, sys.user$ us$, sys.user$ uo$
        WHERE   s$.obj# = o$.obj# AND
                o$.owner# = uo$.user# AND
                s$.owner = us$.name(+) AND
                NVL(s$.owner, 'SYS') NOT IN
                   ('ORDSYS', 'MDSYS', 'CTXSYS', 'ORDPLUGINS', 'LBACSYS',
                    'XDB', 'SI_INFORMTN_SCHEMA', 'DIP',  'DBSNMP', 'EXFSYS', 
                    'WMSYS','ORACLE_OCM', 'ANONYMOUS', 'XS$NULL',
                    'APPQOSSYS', 'OJVMSYS', 'SYSBACKUP', 'SYSDG', 'SYSRAC', 'SYSKM', 
                    'DVSYS', 'DVF', 'DBHADOOP', 'ORDDATA',
                    'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                    'LOGSTDBY_ADMINISTRATOR', 'OLAPSYS', 'FLOWS_FILES',
                    'APEX_050000','APEX_040200','GGSYS') AND
                o$.owner# <> 1 AND
                EXISTS (
                    SELECT obj#
                    FROM sys.obj$ e
                    WHERE e.name = s$.name AND
                          e.owner# = us$.user# AND
                          e.type# = 13 )
/
GRANT SELECT ON sys.exu9uts TO SELECT_CATALOG_ROLE;

REM
REM all synonyms (pre 9.2 only)
REM
CREATE OR REPLACE VIEW exu8syn (
                synnam, synnam2, syntab, tabown, tabnode, public$, synown,
                synownid, syntime) AS
        SELECT  o$.name, o$.name, s$.name, s$.owner, s$.node,
                DECODE(o$.owner#, 1, 1, 0), uo$.name, o$.owner#, o$.ctime
        FROM    sys.exu81obj o$, sys.syn$ s$, sys.user$ us$, sys.user$ uo$
        WHERE   s$.obj# = o$.obj# AND
                o$.owner# = uo$.user# AND
                s$.owner = us$.name(+) AND
                NVL(s$.owner, 'SYS') NOT IN
                   ('ORDSYS', 'MDSYS', 'CTXSYS', 'ORDPLUGINS', 'LBACSYS',
                    'XDB', 'SI_INFORMTN_SCHEMA', 'DIP', 'DBSNMP', 'EXFSYS', 
                    'WMSYS','ORACLE_OCM', 'ANONYMOUS', 'XS$NULL',
                    'APPQOSSYS', 'OJVMSYS', 'SYSBACKUP', 'SYSDG', 'SYSRAC', 'SYSKM', 
                    'DVSYS', 'DVF', 'DBHADOOP', 'ORDDATA', 
                    'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                    'LOGSTDBY_ADMINISTRATOR', 'OLAPSYS', 'FLOWS_FILES',
                    'APEX_050000','APEX_040200','GGSYS')
/
GRANT SELECT ON sys.exu8syn TO SELECT_CATALOG_ROLE;

REM
REM synonyms for incremental export: new or last export not valid
REM
REM obsolete in 9.2
CREATE OR REPLACE VIEW exu8syni AS
        SELECT  s.*
        FROM    sys.exu8syn s, sys.incexp i, sys.incvid v
        WHERE   s.synnam = i.name(+) AND
                s.synownid = i.owner#(+) AND
                NVL(i.type#, 5) = 5 AND
                NVL(i.expid, 9999) > v.expid
/
GRANT SELECT ON sys.exu8syni TO SELECT_CATALOG_ROLE;

REM
REM synonyms for cumulative export: new, last export was inc or not valid
REM
REM obsolete in 9.2
CREATE OR REPLACE VIEW exu8sync AS
        SELECT  s.*
        FROM    sys.exu8syn s, sys.incexp i, sys.incvid v
        WHERE   s.synnam = i.name(+) AND
                s.synownid = i.owner#(+) AND
                NVL(i.type#, 5) = 5 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu8sync TO SELECT_CATALOG_ROLE;

REM
REM user's synnonyms (pre 9.2 only)
REM
CREATE OR REPLACE VIEW exu8synu AS
        SELECT  *
        FROM    sys.exu8syn
        WHERE   synownid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8synu TO PUBLIC;

REM
REM user's synonyms (except those for TYPEs)
REM
CREATE OR REPLACE VIEW exu9synu AS
        SELECT  *
        FROM    sys.exu9syn
        WHERE   synownid = userenv('SCHEMAID') 
/
GRANT READ ON sys.exu9synu TO PUBLIC;

REM
REM user's synonyms for import (except those for TYPEs)
REM
CREATE OR REPLACE VIEW imp9synu AS
        SELECT  *
        FROM    sys.exu9syn
        WHERE   synownid = userenv('SCHEMAID')
/
GRANT READ ON sys.imp9synu TO PUBLIC;

REM
REM user's synonyms (for TYPEs)
REM
CREATE OR REPLACE VIEW exu9utsu AS
        SELECT  *
        FROM    sys.exu9uts
        WHERE   synownid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9utsu TO PUBLIC;

REM
REM clustered tables' columns
REM
CREATE OR REPLACE VIEW exu8cco (
                tname, towner, townerid, cluster$, tcolnam, seq, property) AS
        SELECT  t$.name, u$.name, t$.owner#, c$.name,
                DECODE(BITAND(tc$.property, 1), 1, a$.name, tc$.name),
                cc$.col#, tc$.property
        FROM    sys.obj$ t$, sys.tab$ tab$, sys.obj$ c$, sys.col$ tc$,
                sys.col$ cc$, sys.user$ u$, sys.attrcol$ a$
        WHERE   t$.type# = 2 AND
                t$.obj# = tab$.obj# AND
                tab$.bobj# = cc$.obj# AND
                tab$.obj# = tc$.obj# AND
                tab$.bobj# = c$.obj# AND
                cc$.segcol# = tc$.segcol# AND
                t$.owner# = u$.user# AND
                tc$.obj# = a$.obj# (+) AND
                tc$.intcol# = a$.intcol# (+)
/
GRANT SELECT ON sys.exu8cco TO SELECT_CATALOG_ROLE;

REM
REM current user's clustered tables' columns
REM
CREATE OR REPLACE VIEW exu8ccou AS
        SELECT  *
        FROM    sys.exu8cco
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8ccou TO PUBLIC;

REM
REM all clusters
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8clu (
                objid, dobjid, owner, ownerid, name, tblspace, size$, tsno,
                fileno, blockno, mtime, pctfree$, pctused$, initrans, maxtrans,
                hashkeys, function, avgchn, degree, instances, cache, functxt,
                funclen, single_table, sqlver, tflags) AS
        SELECT  o$.obj#, o$.dataobj#, u$.name, o$.owner#, o$.name, ts$.name,
                NVL(c$.size$, -1), ts$.ts#, c$.file#, c$.block#, o$.mtime,
                MOD(c$.pctfree$, 100), c$.pctused$, c$.initrans, c$.maxtrans,
                NVL(c$.hashkeys, 0), NVL(c$.func, 1), NVL(c$.avgchn, -1),
                NVL(c$.degree, 1), NVL(c$.instances, 1),
                DECODE(BITAND(c$.flags, 8), 8, 1, 0), cd$.condition,
                cd$.condlength, DECODE(BITAND(c$.flags, 65536), 65536, 1, 0),
                sv$.sql_version, c$.flags
        FROM    sys.obj$ o$, sys.clu$ c$, sys.ts$ ts$, sys.user$ u$,
                sys.cdef$ cd$, sys.exu816sqv sv$
        WHERE   o$.obj# = c$.obj# AND
                c$.ts# = ts$.ts# AND
                o$.owner# = u$.user# AND
                cd$.obj#(+) = c$.obj# AND
                o$.spare1 = sv$.version# (+)
/
GRANT SELECT ON sys.exu8clu TO SELECT_CATALOG_ROLE;

REM
REM clusters for incremental export: new or last export invalid
REM altered cluster is now exported because its tables are also exported
REM
CREATE OR REPLACE VIEW exu8clui AS
        SELECT  c.*
        FROM    sys.exu8clu c, sys.incexp i, sys.incvid v
        WHERE   c.name = i.name(+) AND
                c.ownerid = i.owner#(+) AND
                (c.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu8clui TO SELECT_CATALOG_ROLE;

REM
REM clusters for cumulative export: last export was inc or new
REM altered cluster is now exported because its tables are also exported
REM
CREATE OR REPLACE VIEW exu8cluc AS
        SELECT  c.*
        FROM    sys.exu8clu c, sys.incexp i, sys.incvid v
        WHERE   c.name = i.name(+) AND
                c.ownerid = i.owner#(+) AND
                NVL(i.type#, 3) = 3 AND
                (i.itime > NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) OR
                 c.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu8cluc TO SELECT_CATALOG_ROLE;

REM
REM current user's clusters
REM
CREATE OR REPLACE VIEW exu8cluu AS
        SELECT  *
        FROM    sys.exu8clu
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8cluu TO PUBLIC;

REM
REM all storage parameters
REM
CREATE OR REPLACE VIEW exu9sto (
                ownerid, tsno, fileno, blockno, iniext, sext, minext, maxext,
                pctinc, blocks, lists, groups, extents, pcache, ts_type,
                tsname, isonline, blocksize, hscompress, maxsize) AS
        SELECT  s$.user#, s$.ts#, s$.file#, s$.block#, s$.iniexts, s$.extsize,
                s$.minexts, s$.maxexts, s$.extpct, s$.blocks,
                DECODE(BITAND(s$.spare1, 2097152), 2097152, NVL(s$.lists, 0),
                       DECODE(s$.lists, NULL, 1, 65535, 1, lists)),
                DECODE(BITAND(s$.spare1, 2097152), 2097152, NVL(s$.groups, 0),
                       DECODE(s$.groups, NULL, 1, 65535, 1, groups)), 
                extents,
                DECODE(bitand(s$.cachehint, 3), 1, 'KEEP', 2, 'RECYCLE','DEFAULT'),
                DECODE(BITAND(s$.spare1, 1), 1,
                       DECODE(BITAND(ts$.flags, 3), 0, 0, 1, 1, 2, 2, -1),
                       0, -1, -1),
                ts$.name, DECODE(ts$.online$, 1, 1, 4, 1, 0),
                NVL(ts$.blocksize, 2048), BITAND (s$.spare1,2147483647),
                DECODE(BITAND(s$.spare1,4194304), 4194304, s$.bitmapranges, 0)
        FROM    sys.seg$ s$, sys.ts$ ts$
        WHERE   s$.ts# = ts$.ts#(+)
/
GRANT SELECT ON sys.exu9sto TO SELECT_CATALOG_ROLE;

REM
REM storage parameters for current user's segments
REM
CREATE OR REPLACE VIEW exu9stou AS
        SELECT  *
        FROM    sys.exu9sto
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9stou TO PUBLIC;

REM
REM pre V9.0 storage parameter info adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu8sto (
                ownerid, tsno, fileno, blockno, iniext, sext, minext, maxext,
                pctinc, blocks, lists, groups, extents, pcache, ts_type,
                tsname, isonline) AS
        SELECT  s.ownerid, s.tsno, s.fileno, s.blockno,
                CEIL(s.iniext * (s.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                CEIL(s.sext * (s.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                s.minext, s.maxext, s.pctinc,
                CEIL(s.blocks * (s.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                s.lists, s.groups, s.extents, s.pcache, s.ts_type, s.tsname,
                s.isonline
        FROM    sys.exu9sto s
/
GRANT SELECT ON sys.exu8sto TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 curr user's storage param info adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu8stou AS
        SELECT  *
        FROM    sys.exu8sto
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8stou TO PUBLIC;

REM
REM find out correct size of second extent using uet$
REM
CREATE OR REPLACE VIEW exu9tne (
                tsno, fileno, blockno, length) AS
        SELECT  ts#, segfile#, segblock#, length
        FROM    sys.uet$
        WHERE   ext# = 1
/
GRANT READ ON sys.exu9tne TO PUBLIC;

REM
REM pre V9.0 2nd extent info adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu8tne (
                tsno, fileno, blockno, length) AS
        SELECT  e.tsno, e.fileno, e.blockno,
                CEIL(e.length * ((
                    SELECT  t1$.blocksize
                    FROM    sys.ts$ t1$
                    WHERE   t1$.ts# = e.tsno) / (
                    SELECT  t0$.blocksize
                    FROM    sys.ts$ t0$
                    WHERE   t0$.ts# = 0)))
        FROM    sys.exu9tne e
/
GRANT READ ON sys.exu8tne TO PUBLIC;

REM
REM find out correct size of second extent using x$ktfbue (for bitmapped TS)
REM
CREATE OR REPLACE VIEW exu9tneb (
                tsno, fileno, blockno, length) AS
        SELECT  ktfbuesegtsn, ktfbuesegfno, ktfbuesegbno, ktfbueblks
        FROM    sys.x$ktfbue
        WHERE   ktfbueextno = 1
/
GRANT READ ON sys.exu9tneb TO PUBLIC;

REM
REM pre V9.0 2nd extent info adjusted for bitmapped TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu8tneb (
                tsno, fileno, blockno, length) AS
        SELECT  e.tsno, e.fileno, e.blockno,
                CEIL(e.length * ((
                    SELECT  t1$.blocksize
                    FROM    sys.ts$ t1$
                    WHERE   t1$.ts# = e.tsno) / (
                    SELECT  t0$.blocksize
                    FROM    sys.ts$ t0$
                    WHERE   t0$.ts# = 0)))
        FROM    sys.exu9tneb e
/
GRANT READ ON sys.exu8tneb TO PUBLIC;

REM
REM all tablespaces
REM
CREATE OR REPLACE VIEW exu9tbs (
                id, owner, name, isonline, content, iniext, sext, pctinc,
                minext, maxext, minlen, deflog, ext_mgt, alloc_type, blocksize,
                maxsize)
      AS
        SELECT  ts$.ts#, 'SYSTEM', ts$.name,
                DECODE(ts$.online$, 1, 'ONLINE', 4, 'ONLINE', 'OFFLINE'),
                DECODE(ts$.contents$, 0, 'PERMANENT', 1, 'TEMPORARY'),
                ts$.dflinit, ts$.dflincr, ts$.dflextpct, ts$.dflminext,
                ts$.dflmaxext, NVL(ts$.dflminlen, 0), ts$.dflogging,
                ts$.bitmapped, ts$.flags, ts$.blocksize,
                decode(bitand(ts$.flags, 4096), 4096, ts$.affstrength, 0)
        FROM    sys.ts$ ts$
        WHERE   ts$.online$ IN (1, 2, 4) AND
                ts$.ts# != 0 AND
                bitand(ts$.flags,2048) !=2048
/
GRANT SELECT ON sys.exu9tbs TO SELECT_CATALOG_ROLE;

REM
REM pre V9.0 tablespaces adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu81tbs (
                id, owner, name, isonline, content, iniext, sext, pctinc,
                minext, maxext, minlen, deflog, ext_mgt, alloc_type) AS
        SELECT  t.id, t.owner, t.name, t.isonline, t.content,
                CEIL(t.iniext * (t.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                CEIL(t.sext * (t.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                t.pctinc, t.minext, t.maxext,
                CEIL(t.minlen * (t.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                t.deflog,
                CEIL(t.ext_mgt * (t.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                t.alloc_type
        FROM    sys.exu9tbs t
/
GRANT SELECT ON sys.exu81tbs TO SELECT_CATALOG_ROLE;

REM
REM all tablespaces for 8.0
REM
CREATE OR REPLACE VIEW exu8tbs (
                id, owner, name, isonline, content, iniext, sext, pctinc,
                minext, maxext, deflog) AS
        SELECT  tbs$.id, tbs$.owner, tbs$.name, tbs$.isonline, tbs$.content,
                tbs$.iniext, tbs$.sext, tbs$.pctinc, tbs$.minext, tbs$.maxext,
                tbs$.deflog
        FROM    sys.exu81tbs tbs$
        WHERE   tbs$.ext_mgt = 0
/
GRANT SELECT ON sys.exu8tbs TO SELECT_CATALOG_ROLE;

REM
REM tablespace quotas
REM
CREATE OR REPLACE VIEW exu9tsq(
                tsname, tsid, uname, userid, maxblocks, blocksize) AS
        SELECT  t$.name, q$.ts#, u$.name, u$.user#, q$.maxblocks, t$.blocksize
        FROM    sys.ts$ t$, sys.tsq$ q$, sys.user$ u$
        WHERE   q$.user# = u$.user# AND
                q$.ts# = t$.ts# AND
                q$.maxblocks != 0 AND
                t$.online$ IN (1, 2, 4)
/
GRANT SELECT ON sys.exu9tsq TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 tablespace quotas adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu8tsq(
                tsname, tsid, uname, userid, maxblocks) AS
        SELECT  q.tsname, q.tsid, q.uname, q.userid,
                CEIL(q.maxblocks * (q.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0)))
        FROM    sys.exu9tsq q
/
GRANT SELECT ON sys.exu8tsq TO SELECT_CATALOG_ROLE;

REM
REM tablespace names
REM
CREATE OR REPLACE VIEW exu8tsn (
                tsname, tsid, tsflags) AS
        SELECT  t$.name, t$.ts#, t$.flags
        FROM    sys.ts$ t$
/
GRANT SELECT ON sys.exu8tsn TO SELECT_CATALOG_ROLE;

REM
REM 1. files from user mapped tablespaces
REM 2. bitmapped tablespaces (derived from dba_data_files)
REM 3. bitmapped temporary tablespaces (derived from dba_temp_files)
REM
CREATE OR REPLACE VIEW exu9fil(
                fname, fsize, maxextend, inc, tsid, bitmap) AS
        SELECT  v$.name, f$.blocks, f$.maxextend, f$.inc, f$.ts#, 0
        FROM    sys.file$ f$, sys.v$dbfile v$
        WHERE   f$.file# = v$.file# AND
                f$.spare1 IS NULL
      UNION ALL
        SELECT  /* ignore hint, perf problem - ordered use_nl(f$) use_nl(hc) */
                v$.name, DECODE(hc.ktfbhccval, 0, hc.ktfbhcsz, -1),
                DECODE(hc.ktfbhccval, 0, hc.ktfbhcmaxsz, NULL),
                DECODE(hc.ktfbhccval, 0, hc.ktfbhcinc, NULL), f$.ts#,
                ts$.bitmapped
        FROM    sys.v$dbfile v$, sys.file$ f$, sys.x$ktfbhc hc, sys.ts$ ts$
        WHERE   v$.file# = f$.file# AND
                f$.spare1 IS NOT NULL AND
                f$.file# = hc.ktfbhcafno AND
                hc.ktfbhctsn(+) = ts$.ts#
      UNION ALL
        SELECT                                       /*+ ordered use_nl(hc) +*/
                v$.fnnam, DECODE(hc.ktfthccval, 0, hc.ktfthcsz, -1),
                DECODE(hc.ktfthccval, 0, hc.ktfthcmaxsz, NULL),
                DECODE(hc.ktfthccval, 0, hc.ktfthcinc, NULL), ts$.ts#,
                ts$.bitmapped
        FROM    sys.x$kccfn v$, sys.x$ktfthc hc, sys.ts$ ts$
        WHERE   v$.fntyp = 7 AND
                v$.fnnam IS NOT NULL AND
                v$.fnfno = hc.ktfthctfno AND
                hc.ktfthctsn(+) = ts$.ts#
/
GRANT SELECT ON sys.exu9fil TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 file info adjusted for tablespace specific blocksizes
REM
CREATE OR REPLACE VIEW exu81fil(
                fname, fsize, maxextend, inc, tsid, bitmap) AS
        SELECT  f.fname,
                NVL2(f.fsize, DECODE(f.fsize, -1, -1,
                    CEIL(f.fsize * ((
                    SELECT  t1$.blocksize
                    FROM    sys.ts$ t1$
                    WHERE   t1$.ts# = f.tsid) / (
                    SELECT  t0$.blocksize
                    FROM    sys.ts$ t0$
                    WHERE   t0$.ts# = 0)))), NULL),
                NVL2(f.maxextend, CEIL(f.maxextend * ((
                    SELECT  t1$.blocksize
                    FROM    sys.ts$ t1$
                    WHERE   t1$.ts# = f.tsid) / (
                    SELECT  t0$.blocksize
                    FROM    sys.ts$ t0$
                    WHERE   t0$.ts# = 0))), NULL),
                NVL2(f.inc, CEIL(f.inc * ((
                    SELECT  t1$.blocksize
                    FROM    sys.ts$ t1$
                    WHERE   t1$.ts# = f.tsid) / (
                    SELECT  t0$.blocksize
                    FROM    sys.ts$ t0$
                    WHERE t0$.ts# = 0))), NULL),
                f.tsid, f.bitmap
        FROM    sys.exu9fil f
/
GRANT SELECT ON sys.exu81fil TO SELECT_CATALOG_ROLE;

REM
REM all files for 8.0
REM
CREATE OR REPLACE VIEW exu8fil (
                fname, fsize, maxextend, inc, tsid) AS
        SELECT  fname, fsize, maxextend, inc, tsid
        FROM    sys.exu81fil
        WHERE   bitmap = 0
/
GRANT SELECT ON sys.exu8fil TO SELECT_CATALOG_ROLE;

REM
REM all 10.* database links (new columns passwordx and authpwdx in link$)
REM

-- If a user
--   (a) owns the object or
--   (b) is SYS or
--   (c) has EXP_FULL_DATABASE role
-- the user can see all metadata for the object including passwords.
CREATE OR REPLACE VIEW exu10lnk (
                owner, ownerid, name, user$, passwd, host, public$,
                auth_user, auth_passwd, flag, passwdx, auth_passwdx) AS
        SELECT  DECODE(l$.owner#, 1, 'SYSTEM', u$.name), l$.owner#, l$.name,
                l$.userid, l$.password, l$.host, DECODE(l$.owner#, 1, 1, 0),
                l$.authusr, l$.authpwd, l$.flag, l$.passwordx, l$.authpwdx 
        FROM    sys.user$ u$, sys.link$ l$
        WHERE   u$.user# = l$.owner# AND
                (SYS_CONTEXT('USERENV','CURRENT_USERID') IN (u$.user#, 0) OR 
                 EXISTS ( SELECT role 
                          FROM   session_roles 
                          WHERE  role='EXP_FULL_DATABASE' ))
/
GRANT SELECT ON sys.exu10lnk TO EXP_FULL_DATABASE;

REM
REM 10.* current user's database links'
REM
CREATE OR REPLACE VIEW exu10lnku AS
        SELECT  *
        FROM    sys.exu10lnk
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu10lnku TO PUBLIC;

REM 
REM For 9.* the database links dont retrieve anything (1=2)
REM
REM  When they do 10.*(Exp) to 9.*(Imp), dblinks are created on 9.*
REM  They need to recreate them on the 9.* database after import
Rem

CREATE OR REPLACE VIEW exu9lnk (
                owner, ownerid, name, user$, passwd, host, public$,
                auth_user, auth_passwd, flag) AS
        SELECT  owner, ownerid, name, user$, passwd, host, public$,
                auth_user, auth_passwd, flag
        FROM    sys.exu10lnk 
        WHERE 1 = 2;
/
GRANT SELECT ON sys.exu9lnk TO EXP_FULL_DATABASE;

REM
REM current user's database links'
REM
CREATE OR REPLACE VIEW exu9lnku AS
        SELECT  *
        FROM    sys.exu9lnk
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9lnku TO PUBLIC;

REM
REM all database links
REM
CREATE OR REPLACE VIEW exu8lnk (
                owner, ownerid, name, user$, passwd, host, public$) AS
        SELECT  owner, ownerid, name, user$, passwd, host, public$
        FROM    sys.exu9lnk;
/
GRANT SELECT ON sys.exu8lnk TO EXP_FULL_DATABASE;

REM
REM 8.* version
REM
CREATE OR REPLACE VIEW exu8lnku AS
        SELECT  *
        FROM    sys.exu8lnk
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8lnku TO PUBLIC;


REM
REM all rollback segments
REM
CREATE OR REPLACE VIEW exu8rsg (
                owner, name, space$, tsno, fileno , blockno, minext, public$)
      AS
        SELECT  'SYSTEM', r$.name, ts$.name, r$.ts#, r$.file#, r$.block#,
                s$.minexts, DECODE(r$.user#, 1, 1, 0)
        FROM    sys.ts$ ts$, sys.undo$ r$, sys.seg$ s$
        WHERE   r$.status$ != 1 AND
                r$.file# = s$.file# AND
                r$.block# = s$.block# AND
                s$.ts# = ts$.ts# AND
                r$.ts# = s$.ts# AND
                r$.us# != 0 AND
                BITAND(ts$.flags, 16) = 0                 /* undo tablespace */
/
GRANT SELECT ON sys.exu8rsg TO SELECT_CATALOG_ROLE;

REM
REM info on deleted objects EXCEPT snapshots, snapshot logs
REM
CREATE OR REPLACE VIEW exu8del (
                owner, name, type, type#) AS
        SELECT  u$.name, i$.name,
                DECODE(i$.type#, 2, 'TABLE', 3, 'CLUSTER', 4, 'VIEW',
                       5, 'SYNONYM', 6, 'SEQUENCE', 7, 'PROCEDURE', 8,
                       'FUNCTION', 9, 'PACKAGE', 12, 'TRIGGER', 11,
                       'PACKAGE BODY', 28, 'JAVA SOURCE', 29, 'JAVA CLASS', 30,
                       'JAVA RESOURCE', 32, 'INDEXTYPE', 33, 'OPERATOR', 43,
                       'DIMENSION', 56, 'JAVA DATA'), i$.type#
        FROM    sys.incexp i$, sys.user$ u$, sys.obj$ o$
        WHERE   i$.owner# = u$.user# AND
                i$.type# NOT IN (99, 98) AND
                i$.owner# = o$.owner# (+) AND /*"+ 0" for sort-merge outer jn*/
                i$.name = o$.name (+) AND
                i$.type# = o$.type# (+) AND
                o$.owner# IS NULL AND
                o$.linkname IS NULL
/
GRANT SELECT ON sys.exu8del TO SELECT_CATALOG_ROLE;

REM
REM info on sequence number
REM
CREATE OR REPLACE VIEW exu8seq (
                owner, ownerid, name, objid, curval, minval, maxval, incr,
                cache, cycle, order$, audt) AS
        SELECT  u.name, u.user#, o.name, o.obj#, s.highwater, s.minvalue,
                s.maxvalue, s.increment$, s.cache, s.cycle#, s.order$, s.audit$
        FROM    sys.exu81obj o, sys.user$ u, sys.seq$ s
        WHERE   o.obj# = s.obj# AND
                o.owner# = u.user#
/
GRANT SELECT ON sys.exu8seq TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8sequ AS
        SELECT  *
        FROM    sys.exu8seq
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8sequ TO PUBLIC;

REM
REM contraints on table
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8con (
                objid, owner, ownerid, tname, type, cname, cno, condition,
                condlength, enabled, defer, sqlver, iname, idxsysgend) AS
        SELECT  o.obj#, u.name, c.owner#, o.name, cd.type#, c.name, c.con#,
                cd.condition, cd.condlength, NVL(cd.enabled, 0),
                NVL(cd.defer, 0), sv.sql_version, NVL(oi.name, ''),
                DECODE(BITAND(NVL(oi.flags, 0), 4), 4, 1, 0)
        FROM    sys.obj$ o, sys.user$ u, sys.con$ c, sys.cdef$ cd,
                sys.exu816sqv sv, sys.obj$ oi
        WHERE   u.user# = c.owner# AND
                o.obj# = cd.obj# AND
                cd.con# = c.con# AND
                cd.spare1 = sv.version# (+) AND
                cd.enabled = oi.obj# (+) AND
                NOT EXISTS (
                    SELECT  owner, name
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name AND
                            ne.obj_type = 2)
/
GRANT SELECT ON sys.exu8con TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8conu AS
        SELECT  *
        FROM    sys.exu8con
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8conu TO PUBLIC;

REM
REM referential constraints
REM *** The reftyp field is trouble - meant to return any REF type associated
REM *** with the constraint, previously it would allow returning multiple rows
REM *** per constraint if there were multiple REFs in the target object (and
REM *** cannot be fixed since there is no correlation between the cdef$/ccol$
REM *** and refcon$ col/intcol numbers).
REM *** For 9.0.2, the reftyp value has been altered to only return the needed
REM *** pkREF type (4) if the target has a sole pkREF (supports older Exports)
REM *** and the new refconstr boolean has been added to support the 9.0.2 code
REM *** indicating a REF constraint (references a sOID or pkOID).
REM
CREATE OR REPLACE VIEW exu8ref (
                objid, owner, ownerid, tname, rowner, rtname, cname, cno, rcno,
                action, enabled, defer, property, robjid, rownerid, reftype,
                refconstr, type) AS
        SELECT  o.obj#, u.name, c.owner#, o.name, ru.name, ro.name, c.name,
                c.con#, cd.rcon#, NVL(cd.refact, 0), NVL(cd.enabled, 0),
                NVL(cd.defer, 0), NVL(t.property, 0), cd.robj#, ro.owner#,
                DECODE((SELECT COUNT (*)
                        FROM   sys.refcon$ rf
                        WHERE  rf.obj# = o.obj# AND
                               BITAND(rf.reftyp, 4) = 4),
                       1, 4, 0),            /* if 1, EXURUID, else not a REF */
                DECODE((SELECT COUNT (*)
                        FROM   sys.ccol$ cc, sys.col$ c
                        WHERE  cc.con# = cd.con# AND
                               c.obj# = cc.obj# AND
                               c.intcol# = cc.intcol# AND
                               BITAND(c.property, 2097152)= 2097152), /* REA */
                       0, 0, 1),                /* if none, FALSE, else TRUE */
                o.type#
        FROM    sys.user$ u, sys.user$ ru, sys.exu81obj o, sys.obj$ ro,
                sys.con$ c, sys.cdef$ cd, sys.tab$ t
        WHERE   u.user# = c.owner# AND
                o.obj# = cd.obj# AND
                ro.obj# = cd.robj# AND
                cd.con# = c.con# AND
                cd.type# = 4 AND
                ru.user# = ro.owner# AND
                o.obj# = t.obj# (+) AND
                u.name NOT IN ('ORDSYS', 'MDSYS', 'CTXSYS', 'ORDPLUGINS',
                               'LBACSYS', 'XDB',  'SI_INFORMTN_SCHEMA',
                               'DIP', 'DBSNMP', 'EXFSYS', 'WMSYS','ORACLE_OCM',
                               'ANONYMOUS', 'XS$NULL', 'APPQOSSYS',
                               'OJVMSYS', 'SYSBACKUP', 'SYSDG', 'SYSRAC', 'SYSKM', 
                               'DVSYS', 'DVF', 'DBHADOOP', 'ORDDATA',
                               'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                               'LOGSTDBY_ADMINISTRATOR','OLAPSYS','FLOWS_FILES',
                               'APEX_050000','APEX_040200','GGSYS') AND
                NOT EXISTS (
                    SELECT  name, owner, obj_type
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name  AND
                            ne.obj_type = 2)
/
GRANT SELECT ON sys.exu8ref TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8refu AS
        SELECT  *
        FROM    sys.exu8ref
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8refu TO PUBLIC;

REM
REM referential constraints for incremental and cumulative export
REM for tables just exported, i.expid will be greater than v.expid
REM as v.expid is incremented only at the end of the incremental export
REM but i.expid is incremented when the table is exported.
REM USED ONLY WHEN RECORD = YES
REM
CREATE OR REPLACE VIEW exu8refic AS
        SELECT  *
        FROM    sys.exu8ref
        WHERE   (ownerid, tname) IN (
                    SELECT  i.owner#, i.name
                    FROM    sys.incexp i, sys.incvid v
                    WHERE   i.expid > v.expid AND
                            i.type# = 2)
/
GRANT SELECT ON sys.exu8refic TO SELECT_CATALOG_ROLE;

REM
REM referential constraints for incremental export
REM exutabi will return the correct table name because RECORD = NO
REM
CREATE OR REPLACE VIEW exu9refi AS
        SELECT  *
        FROM    sys.exu8ref
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu9tabi)
/
GRANT SELECT ON sys.exu9refi TO SELECT_CATALOG_ROLE;

REM
REM referential constraints for cumulative export, assuming
REM exutabc will return the correct table name because RECORD = NO
REM
CREATE OR REPLACE VIEW exu9refc AS
        SELECT  *
        FROM    sys.exu8ref
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu9tabc)
/
GRANT SELECT ON sys.exu9refc TO SELECT_CATALOG_ROLE;

REM
REM referential constraints for incremental export
REM exutabi will return the correct table name because RECORD = NO
REM
CREATE OR REPLACE VIEW exu81refi AS
        SELECT  *
        FROM    sys.exu8ref
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu81tabi)
/
GRANT SELECT ON sys.exu81refi TO SELECT_CATALOG_ROLE;

REM
REM referential constraints for cumulative export, assuming
REM exutabc will return the correct table name because RECORD = NO
REM
CREATE OR REPLACE VIEW exu81refc AS
        SELECT  *
        FROM    sys.exu8ref
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu81tabc)
/
GRANT SELECT ON sys.exu81refc TO SELECT_CATALOG_ROLE;

REM
REM 8.0 referential constraints for incremental export
REM exutabi will return the correct table name because RECORD = NO
REM
CREATE OR REPLACE VIEW exu8refi AS
        SELECT  *
        FROM    sys.exu8ref
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8tabi)
/
GRANT SELECT ON sys.exu8refi TO SELECT_CATALOG_ROLE;

REM
REM 8.0 referential constraints for cumulative export, assuming
REM exutabc will return the correct table name because RECORD = NO
REM
CREATE OR REPLACE VIEW exu8refc AS
        SELECT  *
        FROM    sys.exu8ref
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8tabc)
/
GRANT SELECT ON sys.exu8refc TO SELECT_CATALOG_ROLE;

REM
REM contraint column list
REM
CREATE OR REPLACE VIEW exu8ccl (
                ownerid, ownername, cno, colname, colno, intcol, property) AS
        SELECT  o.owner#, u.name, cc.con#,
                DECODE(BITAND(c.property, 1), 1, at.name, c.name),
                cc.col#, cc.intcol#, c.property
        FROM    sys.obj$ o, sys.col$ c, sys.ccol$ cc, sys.attrcol$ at,
                sys.user$ u
        WHERE   o.obj# = cc.obj# AND
                c.obj# = cc.obj# AND
                cc.intcol# = c.intcol# AND
                o.owner# = u.user# AND
                c.obj# = at.obj# (+) AND
                c.intcol# = at.intcol# (+) AND
                NOT EXISTS (
                    SELECT  owner, name
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name AND
                            ne.obj_type = 2)
/
GRANT SELECT ON sys.exu8ccl TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8cclu AS
        SELECT  *
        FROM    sys.exu8ccl
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8cclu TO PUBLIC;

CREATE OR REPLACE VIEW exu8cclo (
                ownerid, cno, colname, colno, property) AS
        SELECT  a.ownerid, a.cno, a.colname, a.colno, a.property
        FROM    sys.exu8ccl a, sys.con$ b , sys.cdef$ c
        WHERE   b.owner# = userenv('SCHEMAID') AND
                b.con# = c.con# AND
                c.rcon# = a.cno
/
GRANT READ ON sys.exu8cclo TO PUBLIC;

REM
REM 9.0.2 regular, nested table setid, and REF constraint columns/attributes.
REM
REM The only known way to get the col/attr name for the SETID column
REM of a nested table is to locate the column with the same col#, intcol# -1,
REM and segcol# = 0.
REM
REM Inclusion of the exploded PRIMARY KEY col/attr names in the constraint
REM column attribute names for pkREFs requires deriving the actual REF column/
REM attribute name via the comparison of the constraint column intcol(s) with
REM the intcol number(s) list data in coltype$.
REM Comparing against only the first intcol number(s) list datum assures that
REM only 1 row will be retrieved when referencing a compound PRIMARY KEY (which
REM will have multiple constraint columns).
REM
CREATE OR REPLACE VIEW exu9ccl (
                ownerid, ownername, cno, colname, colno, intcol, property) AS
        SELECT  o.owner#, u.name, cc.con#,
                DECODE(BITAND(c.property, 1), 1, at.name, c.name),
                cc.pos#, c.intcol#, c.property
        FROM    sys.obj$ o, sys.col$ c, sys.ccol$ cc, sys.attrcol$ at,
                sys.user$ u
        WHERE   o.obj# = cc.obj# AND
                o.owner# = u.user# AND
                c.obj# = cc.obj# AND
                c.intcol# = cc.intcol# AND
                BITAND(c.property, 2097152) = 0 AND               /* Not REA */
                BITAND(c.property, 1024) = 0 AND                /* Not SETID */
                c.obj# = at.obj# (+) AND
                c.intcol# = at.intcol# (+) AND
                NOT EXISTS (
                    SELECT  owner, name
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name AND
                            ne.obj_type = 2)
 UNION /* Nested Tables - SETID column */
        SELECT  o.owner#, u.name, cc.con#,
                DECODE(BITAND(c.property, 1), 1, at.name, c.name),
                cc.pos#, c.intcol#, c.property
        FROM    sys.obj$ o, sys.col$ c, sys.ccol$ cc, sys.attrcol$ at,
                sys.user$ u, sys.col$ cn
        WHERE   o.obj# = cc.obj# AND
                o.owner# = u.user# AND
                cn.obj# = cc.obj# AND
                cn.intcol# = cc.intcol# AND
                BITAND(cn.property, 1024) = 1024 AND                /* SETID */
                c.obj# = cc.obj# AND
                c.col# = cn.col# AND
                c.intcol# = (cn.intcol# - 1) AND
                c.segcol# = 0 AND
                c.obj# = at.obj# (+) AND
                c.intcol# = at.intcol# (+) AND
                NOT EXISTS (
                    SELECT  owner, name
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name AND
                            ne.obj_type = 2)
 UNION /* REFs - REF attribute columns */
        SELECT  o.owner#, u.name, cc.con#,
                DECODE(BITAND(rc.property, 1), 1, at.name, rc.name),
                cc.pos#, rc.intcol#, rc.property
        FROM    sys.obj$ o, sys.col$ c, sys.ccol$ cc, sys.attrcol$ at,
                sys.user$ u, sys.coltype$ ct, sys.col$ rc
        WHERE   o.obj# = cc.obj# AND
                o.owner# = u.user# AND
                c.obj# = cc.obj# AND
                c.intcol# = cc.intcol# AND
                BITAND(c.property, 2097152) = 2097152 AND             /* REA */
                ct.obj# = cc.obj# AND
                ct.col# = cc.col# AND
                UTL_RAW.CAST_TO_BINARY_INTEGER(SUBSTRB(ct.intcol#s, 1,2), 3) =
                  cc.intcol# AND            /* first list col# = constr col# */
                rc.obj# = cc.obj# AND
                rc.intcol# = ct.intcol# AND
                rc.obj# = at.obj# (+) AND
                rc.intcol# = at.intcol# (+) AND
                NOT EXISTS (
                    SELECT  owner, name
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name AND
                            ne.obj_type = 2)
/
GRANT SELECT ON sys.exu9ccl TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu9cclu AS
        SELECT  *
        FROM    sys.exu9ccl
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu9cclu TO PUBLIC;

CREATE OR REPLACE VIEW exu9cclo (
                ownerid, cno, colname, colno, property) AS
        SELECT  a.ownerid, a.cno, a.colname, a.colno, a.property
        FROM    sys.exu9ccl a, sys.con$ b , sys.cdef$ c
        WHERE   b.owner# = userenv('SCHEMAID') AND
                b.con# = c.con# AND
                c.rcon# = a.cno
/
GRANT READ ON sys.exu9cclo TO PUBLIC;

REM
REM 10i version of ccl* views
REM
REM 9.0.2 regular, nested table setid, and REF constraint columns/attributes.
REM
REM The only known way to get the col/attr name for the SETID column
REM of a nested table is to locate the column with the same col#, intcol# -1,
REM and segcol# = 0.
REM
REM Inclusion of the exploded PRIMARY KEY col/attr names in the constraint
REM column attribute names for pkREFs requires deriving the actual REF column/
REM attribute name via the comparison of the constraint column intcol(s) with
REM the intcol number(s) list data in coltype$.
REM Comparing against only the first intcol number(s) list datum assures that
REM only 1 row will be retrieved when referencing a compound PRIMARY KEY (which
REM will have multiple constraint columns).
REM
CREATE OR REPLACE VIEW exu10ccl (
                ownerid, ownername, cno, colname, colno, intcol, property,
                nolog) AS
        SELECT  o.owner#, u.name, cc.con#,
                DECODE(BITAND(c.property, 1), 1, at.name, c.name),
                cc.pos#, c.intcol#, c.property,
                DECODE(BITAND(cc.spare1, 1), 1, 1, 0)
        FROM    sys.obj$ o, sys.col$ c, sys.ccol$ cc, sys.attrcol$ at,
                sys.user$ u
        WHERE   o.obj# = cc.obj# AND
                o.owner# = u.user# AND
                c.obj# = cc.obj# AND
                c.intcol# = cc.intcol# AND
                BITAND(c.property, 2097152) = 0 AND               /* Not REA */
                BITAND(c.property, 1024) = 0 AND                /* Not SETID */
                c.obj# = at.obj# (+) AND
                c.intcol# = at.intcol# (+) AND
                NOT EXISTS (
                    SELECT  owner, name
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name AND
                            ne.obj_type = 2)
 UNION /* Nested Tables - SETID column */
        SELECT  o.owner#, u.name, cc.con#,
                DECODE(BITAND(c.property, 1), 1, at.name, c.name),
                cc.pos#, c.intcol#, c.property,
                DECODE(BITAND(cc.spare1, 1), 1, 1, 0)
        FROM    sys.obj$ o, sys.col$ c, sys.ccol$ cc, sys.attrcol$ at,
                sys.user$ u, sys.col$ cn
        WHERE   o.obj# = cc.obj# AND
                o.owner# = u.user# AND
                cn.obj# = cc.obj# AND
                cn.intcol# = cc.intcol# AND
                BITAND(cn.property, 1024) = 1024 AND                /* SETID */
                c.obj# = cc.obj# AND
                c.col# = cn.col# AND
                c.intcol# = (cn.intcol# - 1) AND
                c.segcol# = 0 AND
                c.obj# = at.obj# (+) AND
                c.intcol# = at.intcol# (+) AND
                NOT EXISTS (
                    SELECT  owner, name
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name AND
                            ne.obj_type = 2)
 UNION /* REFs - REF attribute columns */
        SELECT  o.owner#, u.name, cc.con#,
                DECODE(BITAND(rc.property, 1), 1, at.name, rc.name),
                cc.pos#, rc.intcol#, rc.property,
                DECODE(BITAND(cc.spare1, 1), 1, 1, 0)
        FROM    sys.obj$ o, sys.col$ c, sys.ccol$ cc, sys.attrcol$ at,
                sys.user$ u, sys.coltype$ ct, sys.col$ rc
        WHERE   o.obj# = cc.obj# AND
                o.owner# = u.user# AND
                c.obj# = cc.obj# AND
                c.intcol# = cc.intcol# AND
                BITAND(c.property, 2097152) = 2097152 AND             /* REA */
                ct.obj# = cc.obj# AND
                ct.col# = cc.col# AND
                UTL_RAW.CAST_TO_BINARY_INTEGER(SUBSTRB(ct.intcol#s, 1,2), 3) =
                  cc.intcol# AND            /* first list col# = constr col# */
                rc.obj# = cc.obj# AND
                rc.intcol# = ct.intcol# AND
                rc.obj# = at.obj# (+) AND
                rc.intcol# = at.intcol# (+) AND
                NOT EXISTS (
                    SELECT  owner, name
                    FROM    sys.noexp$ ne
                    WHERE   ne.owner = u.name AND
                            ne.name = o.name AND
                            ne.obj_type = 2)
/
GRANT SELECT ON sys.exu10ccl TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu10cclu AS
        SELECT  *
        FROM    sys.exu10ccl
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu10cclu TO PUBLIC;

CREATE OR REPLACE VIEW exu10cclo (
                ownerid, cno, colname, colno, property, nolog) AS
        SELECT  a.ownerid, a.cno, a.colname, a.colno, a.property, a.nolog
        FROM    sys.exu10ccl a, sys.con$ b , sys.cdef$ c
        WHERE   b.owner# = userenv('SCHEMAID') AND
                b.con# = c.con# AND
                c.rcon# = a.cno
/
GRANT READ ON sys.exu10cclo TO PUBLIC;

REM
REM triggers on tables and views
REM
REM Notes: Fetch trigger OBJ# for 9.2
REM        actionsize obsolete as of 8.0.4
REM        sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu92tgr (
                ownerid, owner, baseobject, definition, whenclause, action,
                enabled, tproperty, name, basename, basetype, property,
                btowner, btownerid, sys_evts, sqlver, actionsize,
                trig_objno) AS
        SELECT  o.owner#, u.name, t.baseobject, t.definition, t.whenclause,
                t.action#, t.enabled, t.property, o.name,
                DECODE(BITAND(t.property, 24), 0, (
                    SELECT  o2.name
                    FROM    sys.exu81obj o2
                    WHERE   t.baseobject = o2.obj#), ''),
                DECODE(BITAND(t.property, 24), 0, (
                    SELECT  o2.type#
                    FROM    sys.exu81obj o2
                    WHERE   t.baseobject = o2.obj#), 0),
                NVL((
                    SELECT  tb.property
                    FROM    sys.tab$ tb
                    WHERE   t.baseobject = tb.obj#), 0),
                NVL((
                    SELECT  ut.name
                    FROM    sys.user$ ut, sys.exu81obj o2
                    WHERE   t.baseobject = o2.obj# AND
                            o2.owner# = ut.user#), ''),
                NVL((
                    SELECT  ut.user#
                    FROM    sys.user$ ut, sys.exu81obj o2
                    WHERE   t.baseobject = o2.obj# AND
                            o2.owner# = ut.user#), 0),
                t.sys_evts,
                (   SELECT  sv.sql_version
                    FROM    sys.exu816sqv sv
                    WHERE   o.spare1 = sv.version#),
                t.actionsize, t.obj#
        FROM    sys.exu81obj o, sys.trigger$ t, sys.user$ u
        WHERE   o.obj# = t.obj# AND
                u.user# = o.owner#
/
GRANT SELECT ON sys.exu92tgr TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu92tgru AS
        SELECT  *
        FROM    sys.exu92tgr
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu92tgru TO PUBLIC;

REM (for 9.2 so lrgs don't get diffs - obsolete)
REM triggers for incremental and cumulative export for table just
REM exported.  See comment on exu8refic.
REM
CREATE OR REPLACE VIEW exu92tgric AS
        SELECT  *
        FROM    sys.exu92tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  i.owner#, i.name
                    FROM    sys.incexp i, sys.incvid v
                    WHERE   i.expid > v.expid AND
                            i.type# IN (2, 4))
/
GRANT SELECT ON sys.exu92tgric TO SELECT_CATALOG_ROLE;

REM 
REM pre-8.1.6 - filter out enhanced system events
REM actionsize obsolete in 8.0.4
REM
CREATE OR REPLACE VIEW exu92itgr AS
        SELECT  ownerid, owner, baseobject, definition, whenclause, action,
                enabled, tproperty, name, basename, basetype, property,
                btowner, btownerid, actionsize, trig_objno
        FROM    sys.exu92tgr
        WHERE   BITAND(sys_evts, 255) = sys_evts
/
GRANT SELECT ON sys.exu92itgr TO SELECT_CATALOG_ROLE;

REM
REM triggers for incremental export: record = no
REM
CREATE OR REPLACE VIEW exu92tgri AS
        SELECT  *
        FROM    sys.exu92itgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu9tabi)
      UNION ALL
        SELECT  *
        FROM    sys.exu92itgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfi)
/
GRANT SELECT ON sys.exu92tgri TO SELECT_CATALOG_ROLE;

REM
REM triggers for cumulative export: record = no
REM
CREATE OR REPLACE VIEW exu92tgrc AS
        SELECT  *
        FROM    sys.exu92itgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu9tabc)
      UNION ALL
        SELECT  *
        FROM    sys.exu92itgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfc)
/
GRANT SELECT ON sys.exu92tgrc TO SELECT_CATALOG_ROLE;
REM end of 9.2 incremental/cum views


REM
REM triggers on tables and views
REM
REM Notes: Replace previous outer joins with subqueries
REM        actionsize obsolete as of 8.0.4
REM        sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu816tgr (
                ownerid, owner, baseobject, definition, whenclause, action,
                enabled, tproperty, name, basename, basetype, property,
                btowner, btownerid, sys_evts, sqlver, actionsize) AS
        SELECT  o.owner#, u.name, t.baseobject, t.definition, t.whenclause,
                t.action#, t.enabled, t.property, o.name,
                DECODE(BITAND(t.property, 24), 0, (
                    SELECT  o2.name
                    FROM    sys.exu81obj o2
                    WHERE   t.baseobject = o2.obj#), ''),
                DECODE(BITAND(t.property, 24), 0, (
                    SELECT  o2.type#
                    FROM    sys.exu81obj o2
                    WHERE   t.baseobject = o2.obj#), 0),
                NVL((
                    SELECT  tb.property
                    FROM    sys.tab$ tb
                    WHERE   t.baseobject = tb.obj#), 0),
                NVL((
                    SELECT  ut.name
                    FROM    sys.user$ ut, sys.exu81obj o2
                    WHERE   t.baseobject = o2.obj# AND
                            o2.owner# = ut.user#), ''),
                NVL((
                    SELECT  ut.user#
                    FROM    sys.user$ ut, sys.exu81obj o2
                    WHERE   t.baseobject = o2.obj# AND
                            o2.owner# = ut.user#), 0),
                t.sys_evts,
                (   SELECT  sv.sql_version
                    FROM    sys.exu816sqv sv
                    WHERE   o.spare1 = sv.version#),
                t.actionsize
        FROM    sys.exu81obj o, sys.trigger$ t, sys.user$ u
        WHERE   o.obj# = t.obj# AND
                u.user# = o.owner#
/
GRANT SELECT ON sys.exu816tgr TO SELECT_CATALOG_ROLE;

REM
REM pre-8.1.6 - filter out enhanced system events
REM actionsize obsolete in 8.0.4
REM
CREATE OR REPLACE VIEW exu81tgr AS
        SELECT  ownerid, owner, baseobject, definition, whenclause, action,
                enabled, tproperty, name, basename, basetype, property,
                btowner, btownerid, actionsize
        FROM    sys.exu816tgr
        WHERE   BITAND(sys_evts, 255) = sys_evts
/
GRANT SELECT ON sys.exu81tgr TO SELECT_CATALOG_ROLE;

REM
REM pre-8.1 filter out system events, call triggers, Java triggers, etc...
REM         (all but simple table and view triggers)
REM actionsize obsolete in 8.0.4
REM
CREATE OR REPLACE VIEW exu8tgr AS
        SELECT  ownerid, owner, baseobject, definition, whenclause, action,
                enabled, name, basename, basetype, property, btowner,
                btownerid, actionsize
        FROM    sys.exu816tgr
        WHERE   BITAND(tproperty, 127) in (0, 1)
/
GRANT SELECT ON sys.exu8tgr TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu816tgru AS
        SELECT  *
        FROM    sys.exu816tgr
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu816tgru TO PUBLIC;

CREATE OR REPLACE VIEW exu81tgru AS
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu81tgru TO PUBLIC;

CREATE OR REPLACE VIEW exu8tgru AS
        SELECT  *
        FROM    sys.exu8tgr
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8tgru TO PUBLIC;

REM
REM triggers for incremental and cumulative export for table just
REM exported.  See comment on exu8refic.
REM
CREATE OR REPLACE VIEW exu816tgric AS
        SELECT  *
        FROM    sys.exu816tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  i.owner#, i.name
                    FROM    sys.incexp i, sys.incvid v
                    WHERE   i.expid > v.expid AND
                            i.type# IN (2, 4))
/
GRANT SELECT ON sys.exu816tgric TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81tgric AS
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  i.owner#, i.name
                    FROM    sys.incexp i, sys.incvid v
                    WHERE   i.expid > v.expid AND
                            i.type# IN (2, 4))
/
GRANT SELECT ON sys.exu81tgric TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8tgric AS
        SELECT  *
        FROM    sys.exu8tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  i.owner#, i.name
                    FROM    sys.incexp i, sys.incvid v
                    WHERE   i.expid > v.expid AND
                            i.type# IN (2, 4))
/
GRANT SELECT ON sys.exu8tgric TO SELECT_CATALOG_ROLE;

REM
REM triggers for incremental export: record = no
REM
CREATE OR REPLACE VIEW exu9tgri AS
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu9tabi)
      UNION ALL
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfi)
/
GRANT SELECT ON sys.exu9tgri TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu816tgri AS
        SELECT  *
        FROM    sys.exu816tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu81tabi)
      UNION ALL
        SELECT  *
        FROM    sys.exu816tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfi)
/
GRANT SELECT ON sys.exu816tgri TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81tgri AS
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu81tabi)
      UNION ALL
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfi)
/
GRANT SELECT ON sys.exu81tgri TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8tgri AS
        SELECT  *
        FROM    sys.exu8tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8tabi)
      UNION ALL
        SELECT  *
        FROM    sys.exu8tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfi)
/
GRANT SELECT ON sys.exu8tgri TO SELECT_CATALOG_ROLE;

REM
REM triggers for cumulative export: record = no
REM
CREATE OR REPLACE VIEW exu9tgrc AS
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu9tabc)
      UNION ALL
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfc)
/
GRANT SELECT ON sys.exu9tgrc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu816tgrc AS
        SELECT *
        FROM    sys.exu816tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu81tabc)
      UNION ALL
        SELECT  *
        FROM    sys.exu816tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfc)
/
GRANT SELECT ON sys.exu816tgrc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81tgrc AS
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu81tabc)
      UNION ALL
        SELECT  *
        FROM    sys.exu81tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfc)
/
GRANT SELECT ON sys.exu81tgrc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8tgrc AS
        SELECT  *
        FROM    sys.exu8tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8tabc)
      UNION ALL
        SELECT  *
        FROM    sys.exu8tgr
        WHERE   (ownerid, basename) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8vinfc)
/
GRANT SELECT ON sys.exu8tgrc TO SELECT_CATALOG_ROLE;

REM
REM Notes: sqlver obsolete in 9.0
REM
REM 2734632 - use o.stime vs. o.mtime
CREATE OR REPLACE VIEW exu8spr(
                ownerid, uname, id, name, time, typeid, type, audt, sqlver) AS
        SELECT  o.owner#, u.name, o.obj#, o.name,
                TO_CHAR(o.stime, 'YYYY-MM-DD:HH24:MI:SS'), o.type#,
                DECODE(o.type#, 7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE',
                       11, 'PACKAGE BODY'),
                p.audit$, sv.sql_version
        FROM    sys.exu81obj o, sys.user$ u, sys.procedure$ p, sys.exu816sqv sv
        WHERE   o.owner# = u.user# AND
                o.type# IN (7, 8, 9, 11) AND
                o.obj# = p.obj# AND
                o.spare1 = sv.version# (+)
/
GRANT SELECT ON sys.exu8spr TO SELECT_CATALOG_ROLE;

REM
REM User's view
REM
CREATE OR REPLACE VIEW exu8spu AS
        SELECT  *
        FROM    sys.exu8spr
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8spu TO PUBLIC;

REM
REM stored procedures for incremental export: modified, altered or new
REM
CREATE OR REPLACE VIEW exu8spri AS
        SELECT  s.*
        FROM    sys.exu8spr s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                NVL(i.type#, 7) IN (7, 8, 9, 11) AND
                NVL(i.expid, 9999) > v.expid
/
GRANT SELECT ON sys.exu8spri TO SELECT_CATALOG_ROLE;

REM
REM stored procedures for incremental export: modified, altered or new
REM
CREATE OR REPLACE VIEW exu8sprc AS
        SELECT  s.*
        FROM    sys.exu8spr s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                NVL(i.type#, 7) IN (7, 8, 9, 11) AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu8sprc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8sps(
                obj#, line, source) AS
        SELECT  obj#, line, source
        FROM    sys.source$
/
GRANT SELECT ON sys.exu8sps TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8spsu(
                obj#, line, source) AS
        SELECT  o.obj#, s.line, s.source
        FROM    sys.source$ s, sys.obj$ o
        WHERE   s.obj# = o.obj# AND
                o.owner# = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8spsu TO PUBLIC;

REM
REM stored java entities
REM
CREATE OR REPLACE VIEW exu81jav(
                ownerid, uname, id, shortname, typeid, type) AS
        SELECT  o.owner#, u.name, o.obj#, o.name, o.type#,
                DECODE(o.type#, 28, 'JAVA SOURCE', 29, 'JAVA CLASS',
                       30, 'JAVA RESOURCE')
        FROM    sys.exu81obj o, sys.user$ u
        WHERE   o.owner# = u.user# AND
                o.type# IN (28, 29, 30) AND
                (userenv('SCHEMAID') IN (0, o.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE')) AND
                u.name != 'SYS'
/
GRANT READ ON sys.exu81jav TO PUBLIC;

REM
REM Get Java entities for incremental export
REM
CREATE OR REPLACE VIEW exu81javi AS
        SELECT  j.*
        FROM    sys.exu81jav j, sys.incexp i, sys.incvid v
        WHERE   j.shortname = i.name(+) AND
                j.ownerid = i.owner#(+) AND
                NVL(i.type#, 28) IN (28, 29, 30, 31) AND
                v.expid < NVL(i.expid, 9999)
/
GRANT SELECT ON sys.exu81javi TO SELECT_CATALOG_ROLE;

REM
REM Get Java entities for cumulative export
REM
CREATE OR REPLACE VIEW exu81javc AS
        SELECT  j.*
        FROM    sys.exu81jav j, sys.incexp i, sys.incvid v
        WHERE   j.shortname = i.name(+) AND
                j.ownerid = i.owner#(+) AND
                NVL(i.type#, 28) IN (28, 29, 30, 31) AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 v.expid < NVL(i.expid, 9999))
/
GRANT SELECT ON sys.exu81javc TO SELECT_CATALOG_ROLE;

REM
REM check whether java class DbmsJava is installed
REM
CREATE OR REPLACE VIEW exu81javt (objid) AS
        SELECT  obj#
        FROM    sys.obj$
        WHERE   name LIKE '%DbmsJava' AND
                type# = 29 AND
                owner# = 0 AND
                status = 1
/
GRANT READ ON sys.exu81javt TO PUBLIC;

REM
REM system auditting options
REM
CREATE OR REPLACE VIEW exu8aud (
                userid, name, action, success, failure) AS
        SELECT  a.user#, u.name, m.name, NVL(a.success, 0), NVL(a.failure, 0)
        FROM    sys.audit$ a, sys.user$ u, sys.stmt_audit_option_map m
        WHERE   a.user# = u.user# AND
                a.option# = m.option# AND
                BITAND(m.property, 1) != 1
/
GRANT SELECT ON sys.exu8aud TO SELECT_CATALOG_ROLE;

REM
REM profiles
REM
CREATE OR REPLACE VIEW exu8prf(
                profile#, name) AS
        SELECT  profile#, name
        FROM    sys.profname$
        WHERE   profile# != 0
/
GRANT SELECT ON sys.exu8prf TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8prr(
                profile#, resource#, resname, type, limit) AS
        SELECT  p.profile#, p.resource#, r.name, p.type#, p.limit#
        FROM    sys.profile$ p, sys.resource_map r
        WHERE   p.resource# != 9 AND
                p.resource# = r.resource# AND
                p.type# = r.type#
/
GRANT SELECT ON sys.exu8prr TO SELECT_CATALOG_ROLE;

REM
REM password verification function
REM
CREATE OR REPLACE VIEW exu8pvf (
                funcid, funcname, line, source) AS
        SELECT  o.obj#, o.name, s.line, s.source
        FROM    sys.obj$ o, sys.source$ s
        WHERE   o.type# = 8 AND
                o.owner# = 0 AND
                o.obj# = s.obj#
/
GRANT SELECT ON sys.exu8pvf TO SELECT_CATALOG_ROLE;

REM
REM password history
REM
CREATE OR REPLACE VIEW exu8phs (
                userid, uname, password, password_date) AS
        SELECT  h.user#, u.name, h.password, 
                to_char(h.password_date,'YYYY-MM-DD HH24:MI:SS')
        FROM    sys.user_history$ h, sys.user$ u
        WHERE   h.user# = u.user#
/
GRANT SELECT ON sys.exu8phs TO EXP_FULL_DATABASE;


REM
REM trusted server links
REM
CREATE OR REPLACE VIEW exu8tsl (
                function, dbname, type) AS
        SELECT  DECODE(tl.dbname, '+*', 'allow_all', '-*', 'deny_all',
                       fdef.function),
                DECODE(tl.dbname, '+*', '', '-*', '', '('''||tl.dbname||''')'),
                DECODE(tl.dbname, '+*', 0, '-*', 0, 1)
        FROM    sys.trusted_list$ tl, (
                    SELECT  DECODE (dbname, '+*', 'deny_server ', '-*',
                                    'allow_server ') function
                    FROM    sys.trusted_list$
                    WHERE   dbname like '%*') fdef
/
GRANT SELECT ON sys.exu8tsl TO SELECT_CATALOG_ROLE;

REM
REM New snapshot views for v11
REM
CREATE OR REPLACE VIEW exu11snap (
                owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, flag, rowid_snap,
                primkey_snap, update_snap, update_trig, update_log, mastabs,
                masver, lob_vector, snapshot, snapid, instsite, flavor_id,
                rscn, objflag, flag2, status, sna_type_owner, sna_type_name,
                parent_sowner, parent_vname,
                file_ver, sql_ver, alias_txt, mview_comment, syn_count) AS
        SELECT  s.sowner, u.user#, s.vname, s.tname, s.mview, s.mlink, s.mtime,
                DECODE(s.can_use_log, NULL, 'NO', 'YES'), NVL(s.error#, 0),
                DECODE(s.auto_fast, 'C', 'COMPLETE', 'F', 'FAST', '?', 'FORCE',
                       NULL, 'FORCE', 'N', 'NEVER', 'ERROR'),
                s.query_txt, NVL(s.flag, 0),
                /*
                ** have a flag for each snapshot types: rowid, primary key and
                ** updatable for compatibility purpose
                */
                DECODE(BITAND(NVL(s.flag, 0), 16), 16, 1, 0),
                DECODE(BITAND(NVL(s.flag, 0), 32), 32, 1, 0),
                DECODE(BITAND(NVL(s.flag, 0), 2), 2, 1, 0),
                s.ustrg, s.uslog, s.tables, NVL(s.master_version, 0),
                RAWTOHEX(s.lobmaskvec), s.snapshot, NVL(s.snapid, 0),
                s.instsite, NVL(s.flavor_id, 0),
                s.rscn, s.objflag, s.flag2, s.status, s.sna_type_owner,
                s.sna_type_name, s.parent_sowner, s.parent_vname,
                9, 0, s.alias_txt, c.comment$, s.syn_count
        FROM    sys.snap$ s, sys.user$ u, sys.com$ c, sys.obj$ o, sys.tab$ t
        WHERE   u.name = s.sowner AND 
                o.owner# = u.user# AND 
                o.name = s.vname AND
                o.type# = 2 AND 
                o.obj# = t.obj# AND 
                (bitand(t.property, 67108864) = 67108864) AND
                o.obj# = c.obj#(+) AND c.col#(+) IS NULL
/
GRANT SELECT ON exu11snap TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu11snapu AS
        SELECT  *
        FROM    exu11snap
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ on sys.exu11snapu TO PUBLIC;

REM snapshots for incremental export: modified, altered or new
CREATE OR REPLACE VIEW exu11snapi AS
        SELECT  s.*
        FROM    sys.exu11snap s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                /*
                ** Since snapshot also creates a view with the same name,
                ** we need to check for both type view(4) and snapshot(99).
                ** Note: there will be duplicate entry in sys.incexp for this
                */
                NVL(i.type#, 99) in (4, 99) AND
                (s.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON exu11snapi TO SELECT_CATALOG_ROLE;

REM
REM New snapshot views for v10
REM
CREATE OR REPLACE VIEW exu10snap (
                owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, flag, rowid_snap,
                primkey_snap, update_snap, update_trig, update_log, mastabs,
                masver, lob_vector, snapshot, snapid, instsite, flavor_id,
                rscn, objflag, flag2, status, sna_type_owner, sna_type_name,
                parent_sowner, parent_vname,
                file_ver, sql_ver, alias_txt, mview_comment, syn_count) AS
        SELECT  owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, flag, rowid_snap,
                primkey_snap, update_snap, update_trig, update_log, mastabs,
                masver, lob_vector, snapshot, snapid, instsite, flavor_id,
                rscn, objflag, flag2, status, sna_type_owner, sna_type_name,
                parent_sowner, parent_vname,
                8, sql_ver, alias_txt, mview_comment, syn_count
        FROM    exu11snap
/
GRANT SELECT ON exu10snap TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu10snapu AS
        SELECT  *
        FROM    exu10snap
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ on sys.exu10snapu TO PUBLIC;

REM snapshots for incremental export: modified, altered or new
CREATE OR REPLACE VIEW exu10snapi AS
        SELECT  s.*
        FROM    sys.exu10snap s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                /*
                ** Since snapshot also creates a view with the same name,
                ** we need to check for both type view(4) and snapshot(99).
                ** Note: there will be duplicate entry in sys.incexp for this
                */
                NVL(i.type#, 99) in (4, 99) AND
                (s.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON exu10snapi TO SELECT_CATALOG_ROLE;

REM The cumulative mode is not supported in 10g. So we do not have an exu10snapc
REM view, even though we have the exu9snapc for 9i.

REM
REM New snapshot views for v9
REM
CREATE OR REPLACE VIEW exu9snap (
                owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, flag, rowid_snap,
                primkey_snap, update_snap, update_trig, update_log, mastabs,
                masver, lob_vector, snapshot, snapid, instsite, flavor_id,
                rscn, objflag, flag2, status, sna_type_owner, sna_type_name,
                parent_sowner, parent_vname,
                file_ver, sql_ver, alias_txt, mview_comment) AS
        SELECT  owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, flag, rowid_snap,
                primkey_snap, update_snap, update_trig, update_log, mastabs,
                masver, lob_vector, snapshot, snapid, instsite, flavor_id,
                rscn, objflag, flag2, status, sna_type_owner, sna_type_name,
                parent_sowner, parent_vname,
                5, sql_ver, alias_txt, mview_comment
        FROM    exu11snap
/
GRANT SELECT ON exu9snap TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu9snapu AS
        SELECT  *
        FROM    exu9snap
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ on sys.exu9snapu TO PUBLIC;

REM snapshots for incremental export: modified, altered or new
CREATE OR REPLACE VIEW exu9snapi AS
        SELECT  s.*
        FROM    sys.exu9snap s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                /*
                ** Since snapshot also creates a view with the same name,
                ** we need to check for both type view(4) and snapshot(99).
                ** Note: there will be duplicate entry in sys.incexp for this
                */
                NVL(i.type#, 99) in (4, 99) AND
                (s.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON exu9snapi TO SELECT_CATALOG_ROLE;

REM snapshots for cumulative export: new, last export was inc or not valid
CREATE OR REPLACE VIEW exu9snapc AS
        SELECT  s.*
        FROM    sys.exu9snap s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                NVL(i.type#, 99) = 99 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON exu9snapc TO SELECT_CATALOG_ROLE;


REM
REM new snapshot views for v81
REM
CREATE OR REPLACE VIEW exu81snap (
                owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, flag, rowid_snap,
                primkey_snap, update_snap, update_trig, update_log, mastabs,
                masver, lob_vector, snapshot, snapid, instsite, flavor_id,
                file_ver, sql_ver) AS
        SELECT  owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, flag, rowid_snap,
                primkey_snap, update_snap, update_trig, update_log, mastabs,
                masver, lob_vector, snapshot, snapid, instsite, flavor_id,
                3, sql_ver
        FROM    exu9snap
        WHERE   BITAND(NVL(flag, 0), 16) +     /* supported snapshots: rowid */
                BITAND(NVL(flag, 0), 32) +                    /* primary key */
                BITAND(NVL(flag, 0), 256) +                       /* complex */
                BITAND(NVL(flag, 0), 4096) > 0                  /* aggregate */

/
GRANT SELECT ON sys.exu81snap TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81snapu AS
        SELECT  *
        FROM    sys.exu81snap
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81snapu TO PUBLIC;

REM
REM snapshots for incremental export: modified, altered or new
REM
CREATE OR REPLACE VIEW exu81snapi AS
        SELECT  s.*
        FROM    sys.exu81snap s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                /*
                ** Since snapshot also creates a view with the same name,
                ** we need to check for both type view(4) and snapshot(99).
                ** Note: there will be duplicate entry in sys.incexp for this
                */
                NVL(i.type#, 99) in (4, 99) AND
                (s.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu81snapi TO SELECT_CATALOG_ROLE;

REM
REM snapshots for cumulative export: new, last export was inc or not valid
REM
CREATE OR REPLACE VIEW exu81snapc AS
        SELECT  s.*
        FROM    sys.exu81snap s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                NVL(i.type#, 99) = 99 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu81snapc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81srt (
                sowner, sownerid, vname, master_owner, master, tabnum,
                refresh_time, master_flag, master_objnum, loadertime, instsite,
                lastsuccess, fcmaskvec, ejmaskvec,
                refscn, sub_handle, change_view) AS
        SELECT  srt.sowner, u.user#, srt.vname, srt.mowner, srt.master,
                srt.tablenum, srt.snaptime, srt.masflag, srt.masobj#,
                srt.loadertime, srt.instsite, srt.lastsuccess,
                RAWTOHEX(srt.fcmaskvec), RAWTOHEX(srt.ejmaskvec),
                srt.refscn, srt.sub_handle, srt.change_view
        FROM    sys.snap_reftime$ srt, sys.user$ u
        WHERE   u.name = srt.sowner
/
GRANT SELECT ON sys.exu81srt TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81srtu AS
        SELECT  *
        FROM    sys.exu81srt
        WHERE   sownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81srtu TO PUBLIC;

CREATE OR REPLACE VIEW exu81scm (
                sowner, sownerid, vname, tabnum, snacol, mascol, maspos, role,
                instsite, snapos) AS
        SELECT  sc.sowner, u.user#, sc.vname, sc.tabnum, sc.snacol, sc.mascol,
                NVL(sc.maspos, 0), NVL(sc.colrole, 0), instsite, sc.snapos
        FROM    sys.snap_colmap$ sc, sys.user$ u
        WHERE   u.name = sc.sowner
/
GRANT SELECT ON sys.exu81scm TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81scmu AS
        SELECT  *
        FROM    sys.exu81scm
        WHERE   sownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81scmu TO PUBLIC;

REM snapshots
REM
REM NOTE:
REM * In V8.1, flag was changed from UB2 to UB4. Thus when exporting
REM   to V8.0.X, the value of flag must be forced into a UB2
REM * Do not include MAVs or MJVs (KKZFJVS|KKZFAV1|KKZFAGG)
REM * Do not export to V8.0.X if the base table name is not SNAP$_*
REM
CREATE OR REPLACE VIEW exu8snap (
                owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, flag, rowid_snap,
                primkey_snap, update_snap, update_trig, update_log, mastabs,
                masver, lob_vector, snapshot, snapid, file_ver) AS
        SELECT  owner, ownerid, name, table_name, master_view, master_link,
                mtime, can_use_log, error, type, query, MOD(flag, 65536),
                rowid_snap, primkey_snap, update_snap, update_trig, update_log,
                mastabs, masver, lob_vector, snapshot, snapid, 2
        FROM    sys.exu81snap
        WHERE   BITAND(flag, 28672) = 0 AND   /* Do not include MAVs or MJVs */
                instsite = 0 AND          /* Do not include RepAPI snapshots */
                table_name LIKE 'SNAP$_%'
/
GRANT SELECT ON sys.exu8snap TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8snapu AS
        SELECT  *
        FROM    sys.exu8snap
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8snapu TO PUBLIC;

REM
REM snapshots for incremental export: modified, altered or new
REM
CREATE OR REPLACE VIEW exu8snapi AS
        SELECT  s.*
        FROM    sys.exu8snap s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                /*
                ** Since snapshot also creates a view with the same name,
                ** we need to check for both type view(4) and snapshot(99).
                ** Note: there will be duplicate entry in sys.incexp for this
                */
                NVL(i.type#, 99) IN (4, 99) AND
                (s.mtime > i.itime OR NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu8snapi TO SELECT_CATALOG_ROLE;

REM
REM snapshots for cumulative export: new, last export was inc or not valid
REM
CREATE OR REPLACE VIEW exu8snapc AS
        SELECT  s.*
        FROM    sys.exu8snap s, sys.incexp i, sys.incvid v
        WHERE   s.name = i.name(+) AND
                s.ownerid = i.owner#(+) AND
                NVL(i.type#, 99) = 99 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu8snapc TO SELECT_CATALOG_ROLE;

REM
REM snapshot column mapping for each master table
REM
CREATE OR REPLACE VIEW exu8scm AS
        SELECT  sowner, sownerid, vname, tabnum, snacol, mascol, maspos, role
        FROM    sys.exu81scm
        WHERE   instsite = 0
/
GRANT SELECT ON sys.exu8scm TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8scmu AS
        SELECT  *
        FROM    sys.exu8scm
        WHERE   sownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8scmu TO PUBLIC;

REM
REM snapshot refresh time for each master table used by snapshot
REM
CREATE OR REPLACE VIEW exu8srt AS
        SELECT  sowner, sownerid, vname, master_owner, master, tabnum,
                refresh_time
        FROM    sys.exu81srt
        WHERE   instsite = 0              /* Do not include RepAPI snapshots */
/
GRANT SELECT ON sys.exu8srt TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8srtu AS
        SELECT  *
        FROM    sys.exu8srt
        WHERE   sownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8srtu TO PUBLIC;

REM
REM new snapshot log views for 10iR1
REM
CREATE OR REPLACE VIEW exu10snapl(
                log_owner, log_ownerid, master, log_table, log_trigger, flag,
                youngest, oldest, oldest_pk, mtime, rowid_snapl, primkey_snapl,
                oid_snapl, seq_snapl, inv_snapl, file_ver, temp_log,
                oldest_oid, oldest_new, oldest_seq) AS
        SELECT  m.mowner, u.user#, m.master, m.log, m.trig, NVL(m.flag, 0),
                m.youngest, m.oldest, m.oldest_pk, m.mtime,
                /* have a flag for each snapshot log types: rowid, primary key
                ** for compatibility purpose */
                DECODE(BITAND(NVL(m.flag, 0), 1), 1, 1, 0),
                DECODE(BITAND(NVL(m.flag, 0), 2), 2, 1, 0),
                DECODE(BITAND(NVL(m.flag, 0), 512), 512, 1, 0),
                DECODE(BITAND(NVL(m.flag, 0), 1024), 1024, 1, 0),
                DECODE(BITAND(NVL(m.flag, 0), 16), 16, 1, 0),
                7, m.temp_log, m.oldest_oid, m.oldest_new, m.oldest_seq
        FROM    sys.mlog$ m, sys.user$ u
        WHERE   m.mowner = u.name
/
GRANT SELECT ON sys.exu10snapl TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu10snaplu AS
        SELECT  *
        FROM    sys.exu10snapl
        WHERE   log_ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu10snaplu TO PUBLIC;

REM
REM snapshot logs for incremental export: modified, altered or new
REM
CREATE OR REPLACE VIEW exu10snapli AS
        SELECT  s.*
        FROM    sys.exu10snapl s, sys.incexp i, sys.incvid v
        WHERE   s.master = i.name(+) AND
                s.log_ownerid = i.owner#(+) AND
                /* snapshot log also creates a table with the same name */
                NVL(i.type#, 98) IN (2, 98) AND
                (s.mtime > i.itime OR NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu10snapli TO SELECT_CATALOG_ROLE;

REM
REM snapshot logs for cumulative export: new, last export was inc or not valid
REM
CREATE OR REPLACE VIEW exu10snaplc AS
        SELECT  s.*
        FROM    sys.exu10snapl s, sys.incexp i, sys.incvid v
        WHERE   s.master = i.name(+) AND
                s.log_ownerid = i.owner#(+) AND
                NVL(i.type#, 98) = 98 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu10snaplc TO SELECT_CATALOG_ROLE;

REM
REM new snapshot log views for v9.0
REM
CREATE OR REPLACE VIEW exu9snapl(
                log_owner, log_ownerid, master, log_table, log_trigger, flag,
                youngest, oldest, oldest_pk, mtime, rowid_snapl, primkey_snapl,
                oid_snapl, seq_snapl, inv_snapl, file_ver, temp_log,
                oldest_oid, oldest_new) AS
        SELECT  m.mowner, u.user#, m.master, m.log, m.trig, NVL(m.flag, 0),
                m.youngest, m.oldest, m.oldest_pk, m.mtime,
                /* have a flag for each snapshot log types: rowid, primary key
                ** for compatibility purpose */
                DECODE(BITAND(NVL(m.flag, 0), 1), 1, 1, 0),
                DECODE(BITAND(NVL(m.flag, 0), 2), 2, 1, 0),
                DECODE(BITAND(NVL(m.flag, 0), 512), 512, 1, 0),
                DECODE(BITAND(NVL(m.flag, 0), 1024), 1024, 1, 0),
                DECODE(BITAND(NVL(m.flag, 0), 16), 16, 1, 0),
                5, m.temp_log, m.oldest_oid, m.oldest_new
        FROM    sys.mlog$ m, sys.user$ u
        WHERE   m.mowner = u.name
/
GRANT SELECT ON sys.exu9snapl TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu9snaplu AS
        SELECT  *
        FROM    sys.exu9snapl
        WHERE   log_ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9snaplu TO PUBLIC;

REM
REM snapshot logs for incremental export: modified, altered or new
REM
CREATE OR REPLACE VIEW exu9snapli AS
        SELECT  s.*
        FROM    sys.exu9snapl s, sys.incexp i, sys.incvid v
        WHERE   s.master = i.name(+) AND
                s.log_ownerid = i.owner#(+) AND
                /* snapshot log also creates a table with the same name */
                NVL(i.type#, 98) IN (2, 98) AND
                (s.mtime > i.itime OR NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu9snapli TO SELECT_CATALOG_ROLE;

REM
REM snapshot logs for cumulative export: new, last export was inc or not valid
REM
CREATE OR REPLACE VIEW exu9snaplc AS
        SELECT  s.*
        FROM    sys.exu9snapl s, sys.incexp i, sys.incvid v
        WHERE   s.master = i.name(+) AND
                s.log_ownerid = i.owner#(+) AND
                NVL(i.type#, 98) = 98 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu9snaplc TO SELECT_CATALOG_ROLE;

REM
REM new snapshot log views for v8.1
REM select only v8.1 specific bits from mlog$.flag
REM do not export snapshot logs that are only OBJECT ID based.
REM
CREATE OR REPLACE VIEW exu81snapl(
                log_owner, log_ownerid, master, log_table, log_trigger, flag,
                youngest, oldest, oldest_pk, mtime, rowid_snapl, primkey_snapl,
                file_ver, temp_log) AS
        SELECT  log_owner, log_ownerid, master, log_table, log_trigger,
                /* Clear the bits (0x0080) and higher */
                BITAND(flag, 127), youngest, oldest, oldest_pk, mtime,
                rowid_snapl, primkey_snapl, 3, temp_log
        FROM    sys.exu9snapl
        WHERE   rowid_snapl = 1 OR
                primkey_snapl = 1
/
GRANT SELECT ON sys.exu81snapl TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81snaplu AS
        SELECT  *
        FROM    sys.exu81snapl
        WHERE   log_ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81snaplu TO PUBLIC;

REM
REM snapshot logs for incremental export: modified, altered or new
REM
CREATE OR REPLACE VIEW exu81snapli AS
        SELECT  s.*
        FROM    sys.exu81snapl s, sys.incexp i, sys.incvid v
        WHERE   s.master = i.name(+) AND
                s.log_ownerid = i.owner#(+) AND
                /* snapshot log also creates a table with the same name */
                NVL(i.type#, 98) IN (2, 98) AND
                (s.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu81snapli TO SELECT_CATALOG_ROLE;

REM
REM snapshot logs for cumulative export: new, last export was inc or not valid
REM
CREATE OR REPLACE VIEW exu81snaplc AS
        SELECT  s.*
        FROM    sys.exu81snapl s, sys.incexp i, sys.incvid v
        WHERE   s.master = i.name(+) AND
                s.log_ownerid = i.owner#(+) AND
                NVL(i.type#, 98) = 98 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu81snaplc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81slfc (
                mowner, mownerid, master, colname, oldest, flag) AS
        SELECT  mr.mowner, u.user#, mr.master, mr.colname, mr.oldest,
                NVL(mr.flag, 0)
        FROM    sys.mlog_refcol$ mr, sys.user$ u
        WHERE   u.name = mr.mowner
/
GRANT SELECT ON sys.exu81slfc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81slfcu AS
        SELECT  *
        FROM    sys.exu81slfc
        WHERE   mownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81slfcu TO PUBLIC;

REM
REM snapshot log views for v8.0
REM
CREATE OR REPLACE VIEW exu8snapl (
                log_owner, log_ownerid, master, log_table, log_trigger, flag,
                youngest, oldest, oldest_pk, mtime, rowid_snapl, primkey_snapl,
                file_ver) AS
        SELECT  log_owner, log_ownerid, master, log_table, log_trigger,
                /* Clear bit (0x0040) indicating a temporary log was created */
                DECODE(BITAND(flag, 64), 64, flag - 64, flag), youngest,
                oldest, oldest_pk, mtime, rowid_snapl, primkey_snapl, 2
        FROM    sys.exu81snapl
/
GRANT SELECT ON sys.exu8snapl TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8snaplu AS
        SELECT  *
        FROM    sys.exu8snapl
        WHERE   log_ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8snaplu TO PUBLIC;

REM
REM snapshot logs for incremental export: modified, altered or new
REM
CREATE OR REPLACE VIEW exu8snapli AS
        SELECT  s.*
        FROM    sys.exu8snapl s, sys.incexp i, sys.incvid v
        WHERE   s.master = i.name(+) AND
                s.log_ownerid = i.owner#(+) AND
                /* snapshot log also creates a table with the same name */
                NVL(i.type#, 98) IN (2, 98) AND
                (s.mtime > i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu8snapli TO SELECT_CATALOG_ROLE;

REM
REM snapshot logs for cumulative export: new, last export was inc or not valid
REM
CREATE OR REPLACE VIEW exu8snaplc AS
        SELECT  s.*
        FROM    sys.exu8snapl s, sys.incexp i, sys.incvid v
        WHERE   s.master = i.name(+) AND
                s.log_ownerid = i.owner#(+) AND
                NVL(i.type#, 98) = 98 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 NVL(i.expid, 9999) > v.expid)
/
GRANT SELECT ON sys.exu8snaplc TO SELECT_CATALOG_ROLE;

REM
REM info on deleted snapshots -- they aren't in obj$
REM
CREATE OR REPLACE VIEW exu8delsnap (
                owner, name, type) AS
        SELECT  u$.name, i$.name, 'SNAPSHOT'
        FROM    sys.incexp i$, sys.user$ u$
        WHERE   i$.owner# = u$.user# AND
                i$.type# = 99 AND
                (u$.name, i$.name) NOT IN (
                    SELECT  s$.sowner, s$.vname
                    FROM    sys.snap$ s$
                    WHERE   s$.instsite = 0)
/
GRANT SELECT ON sys.exu8delsnap TO SELECT_CATALOG_ROLE;

REM
REM info on deleted snapshot logs -- they aren't in obj$
REM
CREATE OR REPLACE VIEW exu8delsnapl (
                owner, name, type) AS
        SELECT  u$.name, i$.name, 'SNAPSHOT LOG'
        FROM    sys.incexp i$, sys.user$ u$
        WHERE   i$.owner# = u$.user# AND
                i$.type# = 98 AND
                (u$.name, i$.name) NOT IN (
                    SELECT  m$.mowner, m$.master
                    FROM    sys.mlog$ m$)
/
GRANT SELECT ON sys.exu8delsnapl TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8slog (
                mowner, mownerid, master, snapid, snaptime) AS
        SELECT  sl.mowner, u.user#, sl.master, NVL(sl.snapid, 0), sl.snaptime
        FROM    sys.slog$ sl, sys.user$ u
        WHERE   u.name = sl.mowner
/
GRANT SELECT ON sys.exu8slog TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8slogu AS
        SELECT  *
        FROM    sys.exu8slog
        WHERE   mownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8slogu TO PUBLIC;

REM
REM in v8.0 primary keys are not logged as filter columns
REM
CREATE OR REPLACE VIEW exu8slfc (
                mowner, mownerid, master, colname, oldest, flag) AS
        SELECT  mowner, mownerid, master, colname, oldest, 0
        FROM    sys.exu81slfc
        WHERE   BITAND(flag, 2) != 2
/
GRANT SELECT ON sys.exu8slfc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8slfcu AS
        SELECT  *
        FROM    sys.exu8slfc
        WHERE   mownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8slfcu TO PUBLIC;

CREATE OR REPLACE VIEW exu8glob (
                global_name) AS
        SELECT  value$
        FROM    sys.props$
        WHERE   name = 'GLOBAL_DB_NAME'
/
GRANT READ ON sys.exu8glob TO PUBLIC;

REM
REM info on analyzed objects (obsolete in 8.1)
REM
CREATE OR REPLACE VIEW exu8anal(
                id, rowcnt) AS
        SELECT  obj#, SIGN(NVL(rowcnt, -1))
        FROM    sys.tab$
/
GRANT READ ON sys.exu8anal TO PUBLIC;
GRANT SELECT ON sys.exu8anal TO SELECT_CATALOG_ROLE;

REM
REM Indexes for which optimizer statistics cannot be easily imported
REM
CREATE OR REPLACE VIEW exu9nos (
                tobjid, towner)
      AS                             /* Indexes for table must be exportable */
        SELECT  to$.obj#, to$.owner#
        FROM    sys.obj$ to$, sys.obj$ io$, sys.ind$ ind$
        WHERE   ind$.bo# = to$.obj# AND
                ind$.obj# = io$.obj# AND
                ind$.blevel != -1 AND
                ind$.type# = 8 AND                              /* LOB index */
                (userenv('SCHEMAID') IN (to$.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
      UNION ALL                            /* Table cannot have associations */
        SELECT  to$.obj#, to$.owner#
        FROM    sys.obj$ to$, sys.association$ a$
        WHERE   to$.obj# = a$.obj# AND
                to$.type# = 2 AND                                   /* Table */
                (userenv('SCHEMAID') IN (to$.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
      UNION ALL               /* Type used in table cannot have associations */
        SELECT  to$.obj#, to$.owner#
        FROM    sys.obj$ to$, sys.obj$ tt$, sys.coltype$ ct$,
                sys.association$ a$
        WHERE   to$.obj# = ct$.obj# AND
                ct$.toid = tt$.oid$ AND
                tt$.obj# = a$.obj# AND
                (userenv('SCHEMAID') IN (to$.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9nos TO PUBLIC;

REM
REM Indexes for which optimizer statistics cannot be easily imported
REM
CREATE OR REPLACE VIEW exu81nos (
                tobjid, towner)
      AS                             /* Indexes for table must be exportable */
        SELECT  to$.obj#, to$.owner#
        FROM    sys.obj$ to$, sys.obj$ io$, sys.ind$ ind$
        WHERE   ind$.bo# = to$.obj# AND
                ind$.obj# = io$.obj# AND
                ind$.blevel != -1 AND
                (BITAND(io$.flags, 4) = 4 OR             /* system generated */
                 ind$.type# = 8) AND                            /* LOB index */
                (userenv('SCHEMAID') IN (to$.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
      UNION ALL                            /* Table cannot have associations */
        SELECT  to$.obj#, to$.owner#
        FROM    sys.obj$ to$, sys.association$ a$
        WHERE   to$.obj# = a$.obj# AND
                to$.type# = 2 AND                                   /* Table */
                (userenv('SCHEMAID') IN (to$.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
      UNION ALL               /* Type used in table cannot have associations */
        SELECT  to$.obj#, to$.owner#
        FROM    sys.obj$ to$, sys.obj$ tt$, sys.coltype$ ct$,
                sys.association$ a$
        WHERE   to$.obj# = ct$.obj# AND
                ct$.toid = tt$.oid$ AND
                tt$.obj# = a$.obj# AND
                (userenv('SCHEMAID') IN (to$.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu81nos TO PUBLIC;

REM
REM Associations
REM
CREATE OR REPLACE VIEW exu81assoc (
                objowner, objowner#, objtype, objname, objcol, statsschema,
                statsname, selectivity, cpu_cost, io_cost, net_cost, 
                maintenancetype) AS
        SELECT  ou$.name, oo$.owner#, a$.property, oo$.name, NVL(c$.name, ''),
                NVL(su$.name, ''), NVL(so$.name, ''),
                NVL(a$.default_selectivity, 0), NVL(a$.default_cpu_cost, 0),
                NVL(a$.default_io_cost, 0), NVL(a$.default_net_cost, 0),
                a$.spare2
        FROM    sys.association$ a$, sys.exu81obj oo$, sys.user$ ou$,
                sys.col$ c$, sys.obj$ so$, sys.user$ su$
        WHERE   a$.obj# = oo$.obj# AND
                oo$.owner# = ou$.user# AND
                a$.intcol# = c$.intcol# (+) AND
                a$.obj# = c$.obj# (+) AND
                a$.statstype# = so$.obj# (+) AND
                so$.owner# = su$.user# (+) AND
                (userenv('SCHEMAID') IN (0, oo$.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu81assoc TO PUBLIC;

REM
REM add a view to determine storage clause for unique constraint
REM need for it to be user level because two different users can have the
REM same index name
REM Fields ipctfree, initr, imaxtr, and ipctthres are only used
REM for iots, not for regular tables.
REM
REM Obsolete with 9.0.2
REM
CREATE OR REPLACE VIEW exu8uscu (
                iobjid, idobjid, iname, itsno, ifileno, iblockno, ibobjid,
                ipctfree, iinitr, imaxtr, ipctthres, tspname, property,
                preccnt, deflog, ipbobjid) AS
        SELECT  o$.obj#, o$.dataobj#, o$.name, i$.ts#, i$.file#, i$.block#,
                i$.bo#, i$.pctfree$, i$.initrans, i$.maxtrans,
                MOD(i$.pctthres$, 256), t$.name, i$.property, i$.spare2,
                DECODE(BITAND(i$.flags, 4), 4, 1, 0), 0
        FROM    sys.obj$ o$, sys.ind$ i$, sys.file$ f$, sys.ts$ t$
        WHERE   o$.obj# = i$.obj# AND
                f$.relfile# = i$.file# AND
                f$.ts# = i$.ts# AND
                f$.ts# = t$.ts#
      UNION ALL
        SELECT  o$.obj#, o$.dataobj#, o$.name, ip$.ts#, ip$.file#, ip$.block#,
                ind$.bo#, ip$.pctfree$, ip$.initrans, ip$.maxtrans,
                MOD(ip$.pctthres$, 256), ts$.name, ind$.property, ip$.spare2,
                DECODE(BITAND(ind$.flags, 4), 4, 1, 0), ip$.bo#
        FROM    sys.obj$ o$, sys.indpart$ ip$, sys.ts$ ts$, sys.ind$ ind$,
                sys.tab$ t$
        WHERE   ip$.obj# = o$.obj# AND
                ts$.ts# = ip$.ts# AND
                ip$.bo# = ind$.obj# AND
                o$.type# = 20 AND                        /* Index partitions */
                ind$.bo# = t$.obj#
                AND BITAND(t$.property, 64) = 0                  /* Non-IOTs */
/
GRANT READ ON sys.exu8uscu TO PUBLIC;

REM
REM For iots only: Get top level index's characteristics
REM Expanded in 9.0.2 for use with IOTs in addition to PIOTs
REM  (dataobj only non null for IOTs)
REM
CREATE OR REPLACE VIEW exu81usci (
                ipctthres, ipreccnt, iobjid, tobjid, ovfobjid, ownerid,
                itsno, ifileno, iblockno, ipctfree, iinitr, imaxtr, deflog,
                idobjid) AS
        SELECT  MOD(i$.pctthres$, 256), NVL(i$.spare2, 0), i$.obj#, i$.bo#,
                NVL(t$.bobj#, 0), o$.owner#, i$.ts#, i$.file#, i$.block#,
                i$.pctfree$, i$.initrans, i$.maxtrans,
                DECODE(BITAND(i$.flags, 4), 4, 1, 0), NVL(i$.dataobj#, 0)
        FROM    sys.ind$ i$, sys.obj$ o$, sys.tab$ t$
        WHERE   i$.bo# = t$.obj# AND
                t$.obj# = o$.obj# AND
                i$.type# = 4
/
GRANT SELECT ON sys.exu81usci TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81usciu AS
        SELECT  *
        FROM    sys.exu81usci
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81usciu TO PUBLIC;

REM
REM For iots only: Get top level index's characteristics
REM Expanded in 9.0.2 for use with IOTs in addition to PIOTs
REM Expanded in 10.2.1 for mapping table.
REM  (dataobj only non null for IOTs)
REM
CREATE OR REPLACE VIEW exu10usci (
                ipctthres, ipreccnt, iobjid, tobjid, ovfobjid, ownerid,
                itsno, ifileno, iblockno, ipctfree, iinitr, imaxtr, deflog,
                idobjid, mapobj) AS
        SELECT  MOD(i$.pctthres$, 256), NVL(i$.spare2, 0), i$.obj#, i$.bo#,
                NVL(t$.bobj#, 0), o$.owner#, i$.ts#, i$.file#, i$.block#,
                i$.pctfree$, i$.initrans, i$.maxtrans,
                DECODE(BITAND(i$.flags, 4), 4, 1, 0), NVL(i$.dataobj#, 0),
                t$.pctfree$  /* mapping table obj# for IOTs */
        FROM    sys.ind$ i$, sys.obj$ o$, sys.tab$ t$
        WHERE   i$.bo# = t$.obj# AND
                t$.obj# = o$.obj# AND
                i$.type# = 4
/
GRANT SELECT ON sys.exu10usci TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu10usciu AS
        SELECT  *
        FROM    sys.exu10usci
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu10usciu TO PUBLIC;

REM
REM referential constraints
REM
CREATE OR REPLACE VIEW exu8rif (
                objid, owner, ownerid, tname, rowner, rtname, cname, cno, rcno,
                action, enabled, robjid, defer, property) AS
        SELECT  o.obj#, u.name, c.owner#, o.name, ru.name, ro.name, c.name,
                c.con#, cd.rcon#, NVL(cd.refact, 0), NVL(cd.enabled, 0),
                cd.robj#, NVL(cd.defer, 0), t.property
        FROM    sys.user$ u, sys.user$ ru, sys.obj$ o, sys.obj$ ro, sys.con$ c,
                sys.cdef$ cd, sys.tab$ t
        WHERE   u.user# = c.owner# AND
                o.obj# = cd.obj# AND
                ro.obj# = cd.robj# AND
                cd.con# = c.con# AND
                cd.type# = 4 AND
                ru.user# = ro.owner# AND
                t.obj# = o.obj#
/
GRANT SELECT ON sys.exu8rif TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8erc (
                resource_name, unit_cost) AS
        SELECT  m.name, c.cost
        FROM    sys.resource_cost$ c, sys.resource_map m
        WHERE   c.resource# = m.resource# AND
                m.type# = 0 AND
                c.resource# IN (2, 4, 7, 8)
/
GRANT SELECT ON sys.exu8erc TO SELECT_CATALOG_ROLE;

REM
REM determine OID index for a table
REM
CREATE OR REPLACE VIEW exu8oid (
                tobjid, intcol, iname, idefer, ownerid, pctfree$, initrans,
                maxtrans, itsno, ifile, iblock, itsname, idobjid) AS
        SELECT  cc$.obj#, cc$.intcol#, co$.name, cd$.defer, co$.owner#,
                i$.pctfree$, i$.initrans, i$.maxtrans, i$.ts#, i$.file#,
                i$.block#, ts$.name, i$.dataobj#
        FROM    sys.ccol$ cc$, sys.con$ co$, sys.cdef$ cd$, sys.obj$ o$,
                sys.ind$ i$, sys.ts$ ts$
        WHERE   cc$.con# = co$.con# AND
                cc$.con# = cd$.con# AND
                cd$.type# = 3 AND
                co$.owner# = o$.owner# AND
                co$.name = o$.name AND
                o$.obj# = i$.obj# AND
                i$.ts# = ts$.ts#
/
GRANT SELECT ON sys.exu8oid TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8oidu AS
        SELECT  *
        FROM    sys.exu8oid
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8oidu TO PUBLIC;

REM
REM determine LOB index and LOB storage for a table
REM
CREATE OR REPLACE VIEW exu9lob (
                tobjid, ownerid, cname, sname, ssgflag, stsname, stsno, sfile,
                sblock, sdobjid, schunking, svpool, sflags, iname, isgflag,
                itsname, itsno, ifile, iblock, idobjid, iinitrans, imaxtrans,
                sproperty, coltype, coltypflg, blocksize, intcolid, opaquetype,
                ifreepool)
      AS
        SELECT  l$.obj#, so$.owner#,
                DECODE(BITAND(c$.property, 1), 0, '"'||c$.name||'"', 1,
                       ac$.name),
                so$.name, so$.flags, sts$.name, sts$.ts#, l$.file#, l$.block#,
                so$.dataobj#, l$.chunk, l$.pctversion$, l$.flags, io$.name,
                io$.flags, its$.name, its$.ts#, i$.file#, i$.block#,
                io$.dataobj#, i$.initrans, i$.maxtrans, l$.property,
                NVL(c$.type#, 0), NVL(ct$.flags, 0), sts$.blocksize,
                c$.intcol#,
                NVL((SELECT opq.type
                     FROM   sys.opqtype$ opq
                     WHERE  c$.type# = 58 AND
                            c$.obj# = opq.obj# AND
                            c$.intcol# = opq.intcol#), -1),
                l$.freepools
        FROM    sys.lob$ l$, sys.obj$ so$, sys.col$ c$, sys.attrcol$ ac$,
                sys.seg$ ss$, sys.ts$ sts$, sys.ind$ i$, sys.obj$ io$,
                sys.ts$ its$, sys.coltype$ ct$
        WHERE   l$.lobj# = so$.obj# AND
                l$.obj# = c$.obj# AND
                l$.intcol# =
                     NVL((SELECT opq.lobcol
                          FROM   sys.opqtype$ opq
                          WHERE  c$.type# = 58 AND                 /* opaque */
                                 c$.obj# = opq.obj# AND
                                 c$.intcol# = opq.intcol# AND
                                 opq.type = 1 AND                /* XMLType */
                                 BITAND(opq.flags, 4) = 4  /* stored as lob */
                         ), c$.intcol#) AND
                c$.obj# = ac$.obj#(+) AND
                c$.intcol# = ac$.intcol#(+) AND
                l$.file# = ss$.file# AND
                l$.block# = ss$.block# AND
                ss$.ts# = sts$.ts# AND
                l$.ind# = i$.obj# AND
                l$.ind# = io$.obj# AND
                i$.ts# = its$.ts# AND
                sts$.ts# = its$.ts# AND
                c$.obj# = ct$.obj# (+) AND
                c$.intcol# = ct$.intcol# (+) AND
                BITAND(c$.property, 32768) != 32768 AND /* not unused column */
                BITAND(c$.property, 256) != 256         /* not sys generated */
/
GRANT SELECT ON sys.exu9lob TO SELECT_CATALOG_ROLE;

REM
REM lob indexes for current user
REM
CREATE OR REPLACE VIEW exu9lobu AS
        SELECT  *
        FROM    sys.exu9lob
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9lobu TO PUBLIC;

REM
REM determine LOB index for a deferred storage table
REM
CREATE OR REPLACE VIEW exu112dlob (
                tobjid, ownerid, cname, sname, ssgflag, stsname, stsno, sfile,
                sblock, sdobjid, schunking, svpool, sflags, iname, isgflag,
                itsname, itsno, ifile, iblock, idobjid, iinitrans, imaxtrans,
                sproperty, coltype, coltypflg, blocksize, intcolid, opaquetype,
                ifreepool)
      AS
        SELECT  l$.obj#, so$.owner#,
                DECODE(BITAND(c$.property, 1), 0, '"'||c$.name||'"', 1,
                       ac$.name),
                so$.name, so$.flags, sts$.name, sts$.ts#, l$.file#, l$.block#,
                so$.dataobj#, l$.chunk, l$.pctversion$, l$.flags, io$.name,
                io$.flags, its$.name, its$.ts#, i$.file#, i$.block#,
                io$.dataobj#, i$.initrans, i$.maxtrans, l$.property,
                NVL(c$.type#, 0), NVL(ct$.flags, 0), sts$.blocksize,
                c$.intcol#,
                NVL((SELECT opq.type
                     FROM   sys.opqtype$ opq
                     WHERE  c$.type# = 58 AND
                            c$.obj# = opq.obj# AND
                            c$.intcol# = opq.intcol#), -1),
                l$.freepools
        FROM    sys.lob$ l$, sys.obj$ so$, sys.col$ c$, sys.attrcol$ ac$,
                sys.ts$ sts$, sys.ind$ i$, sys.obj$ io$,
                sys.ts$ its$, sys.coltype$ ct$
        WHERE   l$.lobj# = so$.obj# AND
                l$.obj# = c$.obj# AND
                l$.intcol# =
                     NVL((SELECT opq.lobcol
                          FROM   sys.opqtype$ opq
                          WHERE  c$.type# = 58 AND                 /* opaque */
                                 c$.obj# = opq.obj# AND
                                 c$.intcol# = opq.intcol# AND
                                 opq.type = 1 AND                /* XMLType */
                                 BITAND(opq.flags, 4) = 4  /* stored as lob */
                         ), c$.intcol#) AND
                c$.obj# = ac$.obj#(+) AND
                c$.intcol# = ac$.intcol#(+) AND
                l$.ind# = i$.obj# AND
                l$.ind# = io$.obj# AND
                i$.ts# = its$.ts# AND
                sts$.ts# = its$.ts# AND
                c$.obj# = ct$.obj# (+) AND
                c$.intcol# = ct$.intcol# (+) AND
                BITAND(c$.property, 32768) != 32768 AND /* not unused column */
                BITAND(c$.property, 256) != 256         /* not sys generated */
/
GRANT SELECT ON sys.exu112dlob TO SELECT_CATALOG_ROLE;

REM
REM lob indexes for current user
REM
CREATE OR REPLACE VIEW exu112dlobu AS
        SELECT  *
        FROM    sys.exu112dlob
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu112dlobu TO PUBLIC;

REM
REM pre 9.0 table LOB index/storage adjusted for TS specific blocksizes
REM determine LOB index and LOB storage for a table
REM
CREATE OR REPLACE VIEW exu8lob (
                tobjid, ownerid, cname, sname, ssgflag, stsname, stsno, sfile,
                sblock, sdobjid, schunking, svpool, sflags, iname, isgflag,
                itsname, itsno, ifile, iblock, idobjid, iinitrans, imaxtrans,
                sproperty, coltype, coltypflg) AS
        SELECT  l.tobjid, l.ownerid, l.cname, l.sname, l.ssgflag, l.stsname,
                l.stsno, l.sfile, l.sblock, l.sdobjid,
                CEIL(l.schunking * (l.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                l.svpool, l.sflags, l.iname, l.isgflag, l.itsname, l.itsno,
                l.ifile, l.iblock, l.idobjid, l.iinitrans, l.imaxtrans,
                l.sproperty, l.coltype, l.coltypflg
        FROM    sys.exu9lob l
/
GRANT SELECT ON sys.exu8lob TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 cur user's table LOB index/storage adjusted for TS specific
REM blocksizes
REM
CREATE OR REPLACE VIEW exu8lobu AS
        SELECT  *
        FROM    sys.exu8lob
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8lobu TO PUBLIC;

REM
REM table level attributes definition for LOB columns
REM in partitioned tables
REM
CREATE OR REPLACE VIEW exu9plb (
                tobjid, ownerid, cname, lobname, tsname, sgflags, property,
                chunk, versionp, flags, iniexts, extsize, minexts, maxexts,
                extpct, flists, freegrp, pcache, coltype, coltypflg,
                blocksize, intcolid, opaquetype, maxsize, retention, mintime) AS
        SELECT  o.obj#, o.owner#, 
                DECODE(bitand(c.property,1), 0, '"'||c.name||'"', 1, ac.name),
                lo.name, ts.name, lo.flags,
                plob.defpro, plob.defchunk, plob.defpctver$, plob.defflags,
                NVL(plob.definiexts, 0), NVL(plob.defextsize, 0),
                NVL(plob.defminexts, 0), NVL(plob.defmaxexts, 0),
                NVL(plob.defextpct, -1), NVL(plob.deflists, 0),
                NVL(plob.defgroups, 0),
                DECODE(bitand(plob.defbufpool,3), 1, 'KEEP', 2, 'RECYCLE',
                       'DEFAULT'),
                NVL(c.type#, 0), NVL(ct.flags, 0),
                NVL(ts.blocksize, NVL( 
                        /* should be avail. thru lobcompart, lobfrag if null */
                (SELECT ts2.blocksize
                FROM    sys.ts$ ts2, sys.lobfrag$ lf
                WHERE   l.lobj# = lf.parentobj# AND
                        lf.ts# = ts2.ts# AND rownum < 2),
                (SELECT ts2.blocksize
                FROM    sys.ts$ ts2, sys.lobcomppart$ lcp, sys.lobfrag$ lf
                WHERE   l.lobj# = lcp.lobj# AND 
                        lcp.partobj# = lf.parentobj# AND 
                        lf.ts# = ts2.ts# AND rownum < 2))),
                c.intcol#,
                NVL((SELECT opq.type
                     FROM   sys.opqtype$ opq
                     WHERE  c.type# = 58 AND
                            c.obj# = opq.obj# AND
                            c.intcol# = opq.intcol#), -1),
                NVL(plob.defmaxsize, 0),
                NVL(plob.defretention, 0),
                NVL(plob.defmintime, 0)
        FROM    sys.partlob$ plob, sys.obj$ o, sys.lob$ l, sys.col$ c,
                sys.attrcol$ ac, sys.coltype$ ct, sys.obj$ lo, sys.ts$ ts
        WHERE   o.obj# = c.obj# AND
                l.obj# = c.obj# AND
                l.intcol# =
                     NVL((SELECT opq.lobcol
                          FROM   sys.opqtype$ opq
                          WHERE  c.type# = 58 AND                  /* opaque */
                                 c.obj# = opq.obj# AND
                                 c.intcol# = opq.intcol# AND
                                 opq.type = 1 AND                 /* XMLType */
                                 BITAND(opq.flags, 4) = 4   /* stored as lob */
                         ), c.intcol#) AND
                l.obj# = ac.obj#(+) and
                l.intcol# = ac.intcol#(+) and
                l.lobj# = lo.obj# AND
                l.lobj# = plob.lobj#  AND
                plob.defts# = ts.ts# (+) AND
                c.obj# = ct.obj# (+) AND
                c.intcol# = ct.intcol# (+) AND
                BITAND(c.property, 32768) != 32768 AND  /* not unused column */
                BITAND(c.property, 256) != 256          /* not sys generated */
/
GRANT SELECT ON sys.exu9plb TO SELECT_CATALOG_ROLE;

REM
REM table level default attributes for current
REM user's LOB columns in partitioned tables
REM
CREATE OR REPLACE VIEW exu9plbu AS
        SELECT  *
        FROM    sys.exu9plb
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9plbu TO PUBLIC;

REM
REM pre 9.0 partitioned tables table level attributes definition for LOB
REM columns adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu81plb (
                tobjid, ownerid, cname, lobname, tsname, sgflags, property,
                chunk, versionp, flags, iniexts, extsize, minexts, maxexts,
                extpct, flists, freegrp, pcache, coltype, coltypflg) AS
        SELECT  l.tobjid, l.ownerid, l.cname, l.lobname, l.tsname, l.sgflags,
                l.property,
                CEIL(l.chunk * (l.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                l.versionp, l.flags,
                CEIL(l.iniexts * (l.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                CEIL(l.extsize * (l.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                l.minexts, l.maxexts, l.extpct, l.flists, l.freegrp, l.pcache,
                l.coltype, l.coltypflg
        FROM    sys.exu9plb l
/
GRANT SELECT ON sys.exu81plb TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 cur user's partitioned tables table level attributes definition
REM for LOB columns adjusted for TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu81plbu AS
        SELECT  *
        FROM    sys.exu81plb
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81plbu TO PUBLIC;

REM
REM determine attributes of noncomposite partitions of LOB columns
REM
CREATE OR REPLACE VIEW exu9lbp (
                pobjid, tobjid, ownerid, cname, lobpname, tsname, sgflags,
                chunk, versionp, flags, property, tsno, fileno, blockno,
                dobjid, iname, isgflag, itsname, itsno, ifile, iblock,
                idobjid, iinitrans, imaxtrans, coltype, coltypflg, blocksize)
      AS
        SELECT  /*+ NO_INDEX(i_obj1) +*/ 
                po.obj#, o.obj#, o.owner#, 
                DECODE(bitand(c.property,1), 0, '"'||c.name||'"', 1, ac.name),
                lpo.subname,
                ts.name, lpo.flags, lf.chunk, lf.pctversion$, lf.fragflags,
                lf.fragpro, lf.ts#, lf.file#, lf.block#, lpo.dataobj#,
                lipo.name, lipo.flags, its.name, its.ts#, ip.file#, ip.block#,
                lipo.dataobj#, ip.initrans , ip.maxtrans, NVL(c.type#, 0),
                (select NVL(ct.flags, 0) from sys.coltype$ ct
                        where ct.obj# = c.obj# AND ct.intcol# = c.intcol#),
                ts.blocksize
        FROM    sys.indpart$ ip, sys.obj$ o, sys.col$ c, 
                sys.attrcol$ ac, sys.obj$ lpo,
                sys.lob$ l, sys.partobj$ pobj, sys.ts$ ts, sys.obj$ lipo,
                sys.lobfrag$ lf, sys.obj$ po, sys.ts$ its
        WHERE   pobj.obj# = o.obj# AND
                MOD(pobj.spare2, 256) = 0 AND
                o.obj# = c.obj# AND
                c.obj# = l.obj# AND
                l.obj# = ac.obj#(+) AND
                l.intcol# = ac.intcol#(+) AND
                c.intcol# = l.intcol# AND
                l.lobj# = lf.parentobj# AND
                lf.fragobj# = lpo.obj# AND
                lf.tabfragobj# = po.obj# AND
                lf.indfragobj# = lipo.obj# AND
                lf.indfragobj# = ip.obj# AND
                ip.ts# = its.ts# AND
                lf.ts# = ts.ts# AND
                BITAND(c.property, 32768) != 32768 AND  /* not unused column */
                BITAND(c.property, 256) != 256          /* not sys generated */
      UNION ALL                                                      /* PIOT */
        SELECT  /*+ NO_INDEX(i_obj1) +*/ 
                ipt.obj#, o.obj#, o.owner#, 
                DECODE(bitand(c.property,1), 0, '"'||c.name||'"', 1, ac.name),
                lpo.subname,
                ts.name, lpo.flags, lf.chunk, lf.pctversion$, lf.fragflags,
                lf.fragpro, lf.ts#, lf.file#, lf.block#, lpo.dataobj#,
                lipo.name, lipo.flags, its.name, its.ts#, ip.file#, ip.block#,
                lipo.dataobj#, ip.initrans , ip.maxtrans, NVL(c.type#, 0),
                (select NVL(ct.flags, 0) from sys.coltype$ ct
                        where ct.obj# = c.obj# AND ct.intcol# = c.intcol#),
                ts.blocksize
        FROM    sys.indpart$ ipt, sys.indpart$ ip, sys.ind$ i, sys.tabpart$ tp,
                sys.obj$ o, sys.col$ c, sys.attrcol$ ac,
                sys.obj$ lpo, sys.lob$ l,
                sys.partobj$ pobj, sys.ts$ ts, sys.obj$ lipo, sys.lobfrag$ lf,
                sys.ts$ its
        WHERE   i.obj# = ipt.bo# AND
                tp.bo# = i.bo# AND
                tp.part# = ipt.part# AND
                pobj.obj# = o.obj# AND
                MOD(pobj.spare2, 256) = 0 AND
                o.obj# = c.obj# AND
                c.obj# = l.obj# AND
                l.obj# = ac.obj#(+) AND
                l.intcol# = ac.intcol#(+) AND
                c.intcol# = l.intcol# AND
                l.lobj# = lf.parentobj# AND
                lf.fragobj# = lpo.obj# AND
                lf.tabfragobj# = tp.obj#  AND
                lf.indfragobj# = lipo.obj# AND
                lf.indfragobj# = ip.obj# AND
                ip.ts# = its.ts# AND
                lf.ts# = ts.ts# AND
                BITAND(c.property, 32768) != 32768 AND  /* not unused column */
                BITAND(c.property, 256) != 256          /* not sys generated */
/
GRANT SELECT ON sys.exu9lbp TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu9lbpu AS
        SELECT  *
        FROM    sys.exu9lbp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9lbpu TO PUBLIC;

REM
REM pre 9.0 attributes of noncomposite partitions of LOB columns
REM
CREATE OR REPLACE VIEW exu81lbp (
                pobjid, ownerid, cname, lobpname, tsname, sgflags, chunk,
                versionp, flags, property, tsno, fileno, blockno, dobjid,
                iname, isgflag, itsname, itsno, ifile, iblock, idobjid,
                iinitrans, imaxtrans, coltype, coltypflg) AS
        SELECT  l.pobjid, l.ownerid, l.cname, l.lobpname, l.tsname, l.sgflags,
                CEIL(l.chunk * (l.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                l.versionp, l.flags, l.property, l.tsno, l.fileno, l.blockno,
                l.dobjid, l.iname, l.isgflag, l.itsname, l.itsno, l.ifile,
                l.iblock, l.idobjid, l.iinitrans, l.imaxtrans, l.coltype,
                l.coltypflg
        FROM    sys.exu9lbp l
/
GRANT SELECT ON sys.exu81lbp TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 cur user's attributes of noncomposite partitions of LOB columns
REM
CREATE OR REPLACE VIEW exu81lbpu AS
        SELECT  *
        FROM    sys.exu81lbp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81lbpu TO PUBLIC;

REM
REM determine LOB attributes for a composite partition
REM
CREATE OR REPLACE VIEW exu9lbcp (
                pobjid, ownerid, cname, lobcpname, tsname, sgflags, chunk,
                versionp, flags, property, iniexts, extsize, minexts, maxexts,
                extpct, flists, fgroups, pcache, coltype, coltypflg, blocksize,
                maxsize, retention, mintime)
      AS
        SELECT  po.obj#, o.owner#, 
                DECODE(bitand(c.property,1), 0, '"'||c.name||'"', 1, ac.name),
                lpo.subname, ts.name,
                lpo.flags, lcp.defchunk, lcp.defpctver$, lcp.defflags,
                lcp.defpro, NVL(lcp.definiexts, 0), NVL(lcp.defextsize, 0),
                NVL(lcp.defminexts, 0), NVL(lcp.defmaxexts, 0),
                NVL(lcp.defextpct, -1), NVL(lcp.deflists, 0),
                NVL(lcp.defgroups, 0),
                DECODE(bitand(lcp.defbufpool, 3), 1, 'KEEP', 2, 'RECYCLE',
                       'DEFAULT'),
                NVL(c.type#, 0), NVL(ct.flags, 0),
                NVL(ts.blocksize, (/*should be avail. thru tabcompart if null*/
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = (NVL((
                                SELECT  tcp$.defts#
                                FROM    sys.tabcompart$ tcp$
                                WHERE   tcp$.obj# = lcp.tabpartobj#),
                                           0)))),
                lcp.defmaxsize, lcp.defretention, lcp.defmintime
        FROM    sys.obj$ o, sys.lob$ l, sys.col$ c, sys.attrcol$ ac,
                sys.obj$ lo, sys.obj$ lpo,
                sys.lobcomppart$ lcp, sys.obj$ po, sys.ts$ ts,
                sys.partobj$ pobj, sys.coltype$ ct
        WHERE   pobj.obj# = o.obj# AND
                MOD(pobj.spare2, 256) != 0 AND
                o.obj# = c.obj# AND
                c.obj# = l.obj# AND
                l.obj# = ac.obj#(+) AND
                l.intcol# = ac.intcol#(+) AND
                l.intcol# = c.intcol# AND
                l.lobj# = lo.obj# AND
                l.lobj# = lcp.lobj# AND
                lcp.tabpartobj# = po.obj# AND
                lcp.partobj# = lpo.obj# AND
                lcp.defts# = ts.ts# (+) AND
                c.obj# = ct.obj# (+) AND
                c.intcol# = ct.intcol# (+) AND
                BITAND(c.property, 32768) != 32768 AND  /* not unused column */
                BITAND(c.property, 256) != 256          /* not sys generated */
/
GRANT SELECT ON sys.exu9lbcp TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu9lbcpu AS
        SELECT  *
        FROM    sys.exu9lbcp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9lbcpu TO PUBLIC;

REM
REM pre 9.0 LOB attributes for a composite partition adjusted for TS specific
REM blocksizes
REM
CREATE OR REPLACE VIEW exu81lbcp (
                pobjid, ownerid, cname, lobcpname, tsname, sgflags, chunk,
                versionp, flags, property, iniexts, extsize, minexts, maxexts,
                extpct, flists, fgroups, pcache, coltype, coltypflg) AS
        SELECT  l.pobjid, l.ownerid, l.cname, l.lobcpname, l.tsname, l.sgflags,
                CEIL(l.chunk * (l.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                l.versionp, l.flags, l.property,
                CEIL(l.iniexts * (l.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE t$.ts# = 0))),
                CEIL(l.extsize * (l.blocksize / (
                    SELECT  t$.blocksize
                    FROM    sys.ts$ t$
                    WHERE   t$.ts# = 0))),
                l.minexts, l.maxexts, l.extpct, l.flists, l.fgroups, l.pcache,
                l.coltype, l.coltypflg
        FROM    sys.exu9lbcp l
/
GRANT SELECT ON sys.exu81lbcp TO SELECT_CATALOG_ROLE;

REM
REM pre 9.0 cur user's LOB attributes for a composite partition adjusted for
REM TS specific blocksizes
REM
CREATE OR REPLACE VIEW exu81lbcpu AS
        SELECT  *
        FROM    sys.exu81lbcp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81lbcpu TO PUBLIC;

REM
REM Determine LOB storage for subpartition of LOB columns
REM for 8.1 and later
REM for 9.0 no columns needing pre 9.0 blocksize adjustment
REM
CREATE OR REPLACE VIEW exu81lbsp (
                pobjid, tobjid, ownerid, cname, lobspname, tsname, sgflags,
                tsno, fileno, blockno, dobjid, iname, isgflag, itsname, itsno,
                ifile, iblock, idobjid, iinitrans, imaxtrans, coltype,
                coltypflg, blocksize, flags) AS
        SELECT  /*+ NO_INDEX(i_obj1) +*/
                spo.obj#, o.obj#, o.owner#, 
                DECODE(bitand(c.property,1), 0, '"'||c.name||'"', 1, ac.name),
                lspo.subname,
                ts.name, lspo.flags, ts.ts#, lf.file#, lf.block#,
                lspo.dataobj#, lispo.name, lispo.flags, its.name, its.ts#,
                isp.file#, isp.block#, lispo.dataobj#, isp.initrans,
                isp.maxtrans, NVL(c.type#, 0),
                (select NVL(ct.flags, 0) from sys.coltype$ ct
                        where ct.obj# = c.obj# AND ct.intcol# = c.intcol#),
                ts.blocksize, lf.fragflags
        FROM    sys.lobfrag$ lf, sys.indsubpart$ isp, sys.lobcomppart$ lcp,
                sys.partobj$ pobj, sys.obj$ o, sys.col$ c, 
                sys.attrcol$ ac, sys.lob$ l,
                sys.obj$ spo, sys.obj$ lspo, sys.obj$ lispo, sys.ts$ its,
                sys.ts$ ts
        WHERE   pobj.obj# = o.obj# AND
                MOD(pobj.spare2, 256) != 0 AND
                o.obj# = c.obj# AND
                c.obj# = l.obj# AND
                c.intcol# = l.intcol# AND
                l.obj# = ac.obj#(+) AND
                l.intcol# = ac.intcol#(+) AND 
                l.lobj# = lcp.lobj# AND
                lf.parentobj# = lcp.partobj# AND
                lf.fragobj# = lspo.obj# AND
                lf.tabfragobj# = spo.obj# AND
                lf.indfragobj# = lispo.obj# AND
                lf.indfragobj# = isp.obj# AND
                isp.ts# = its.ts# AND
                lf.ts# = ts.ts# AND
                BITAND(c.property, 32768) != 32768 AND  /* not unused column */
                BITAND(c.property, 256) != 256          /* not sys generated */
/
GRANT SELECT ON sys.exu81lbsp TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81lbspu AS
        SELECT  /*+ NO_INDEX(xx1.o i_obj2) +*/ *
        FROM    sys.exu81lbsp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81lbspu TO PUBLIC;

REM
REM Job Queues
REM Should not export the jobs owns by sys 
REM
CREATE OR REPLACE VIEW exu8jbq (
                job, ownerid, owner, lowner, cowner, next_date, flag,
                interval#, what, nlsenv, env, instance) AS
        SELECT  j$.job, u$.user#, j$.powner, j$.lowner, j$.cowner,
                TO_CHAR(j$.next_date, 'YYYY-MM-DD:HH24:MI:SS'),
                DECODE(j$.flag, 1, 'TRUE', 0, 'FALSE'),
                REPLACE(j$.interval#, '''', ''''''),
                REPLACE(j$.what, '''', ''''''),
                REPLACE(j$.nlsenv, '''', ''''''), j$.env, j$.field1
        FROM    sys.job$ j$, sys.user$ u$
        WHERE   j$.powner = u$.name AND (u$.user# != 0 OR
                SYS_CONTEXT('USERENV','CURRENT_USERID') = 0) AND
                upper(what) <> 'SYS.DBMS_AQADM_SYS.REGISTER_DRIVER();'
/
GRANT SELECT ON sys.exu8jbq TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8jbqu AS
        SELECT  *
        FROM    sys.exu8jbq
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8jbqu TO PUBLIC;

REM
REM Refresh Groups
REM
CREATE OR REPLACE VIEW exu81rgs (
                refgroup, ownerid, owner, instsite) AS
        SELECT  NVL(r$.refgroup, 0), u$.user#, r$.owner, r$.instsite
        FROM    sys.rgroup$ r$, sys.user$ u$
        WHERE   r$.owner = u$.name
/
GRANT SELECT ON sys.exu81rgs TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81rgsu AS
        SELECT  *
        FROM    sys.exu81rgs
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu81rgsu TO PUBLIC;

CREATE OR REPLACE VIEW exu8rgs AS
        SELECT  refgroup, ownerid, owner
        FROM    sys.exu81rgs
        WHERE   instsite = 0              /* Do not include RepAPI refgroups */
/
GRANT SELECT ON sys.exu8rgs TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8rgsu AS
        SELECT  *
        FROM    sys.exu8rgs
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8rgsu TO PUBLIC;

REM
REM Refresh Group Children
REM
CREATE OR REPLACE VIEW exu81rgc (
                owner, ownerid, child, type, refgroup, instsite) AS
        SELECT  rc$.owner, u$.user#, rc$.name, rc$.type#, NVL(rc$.refgroup, 0),
                rc$.instsite
        FROM    sys.rgchild$ rc$, sys.user$ u$
        WHERE   rc$.owner = u$.name
/
GRANT SELECT ON sys.exu81rgc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81rgcu AS
        SELECT  *
        FROM    sys.exu81rgc
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu81rgcu TO PUBLIC;

CREATE OR REPLACE VIEW exu8rgc AS
        SELECT  owner, ownerid, child, type, refgroup
        FROM    sys.exu81rgc
        WHERE   instsite = 0              /* Do not include RepAPI snapshots */
/
GRANT SELECT ON sys.exu8rgc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8rgcu AS
        SELECT  *
        FROM    sys.exu8rgc
        WHERE   userenv('SCHEMAID') = ownerid
/
GRANT READ ON sys.exu8rgcu TO PUBLIC;

REM
REM PoSTtables actions
REM
CREATE OR REPLACE VIEW exu8pst (
                owner, ownerid, tname, tobjid, callorder, callarg, objtype,
                usrarg, property) AS
        SELECT  a$.owner, u$.user#, a$.name, o$.obj#, a$.callorder, a$.callarg,
                a$.obj_type, a$.user_arg, t$.property
        FROM    sys.expact$ a$, sys.user$ u$, sys.obj$ o$, sys.tab$ t$
        WHERE   u$.name = a$.owner AND
                o$.owner# = u$.user# AND
                o$.name = a$.name AND
                t$.obj# = o$.obj#
/
GRANT SELECT ON sys.exu8pst TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8pstu AS
        SELECT  *
        FROM    sys.exu8pst
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8pstu TO PUBLIC;

REM
REM PoSTtables actions incremental/cumulative with record = Y
REM
CREATE OR REPLACE VIEW exu8pstic AS
        SELECT  *
        FROM    sys.exu8pst
        WHERE   (ownerid, tname) IN (
                    SELECT  i.owner#, i.name
                    FROM    sys.incexp i, sys.incvid v
                    WHERE   i.expid > v.expid AND
                            i.type# = 2)
/
GRANT SELECT ON sys.exu8pstic TO SELECT_CATALOG_ROLE;

REM
REM PoSTtables actions for incremental export : record = N
REM
CREATE OR REPLACE VIEW exu9psti AS
        SELECT  *
        FROM    sys.exu8pst
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu9tabi)
/
GRANT SELECT ON sys.exu9psti TO SELECT_CATALOG_ROLE;

REM
REM PoSTtables actions for cumulative  export : record = N
REM
CREATE OR REPLACE VIEW exu9pstc AS
        SELECT  *
        FROM    sys.exu8pst
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu9tabc)
/
GRANT SELECT ON sys.exu9pstc TO SELECT_CATALOG_ROLE;

REM
REM 8.1 PoSTtables actions for incremental export : record = N
REM
CREATE OR REPLACE VIEW exu81psti AS
        SELECT  *
        FROM    sys.exu8pst
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu81tabi)
/
GRANT SELECT ON sys.exu81psti TO SELECT_CATALOG_ROLE;

REM
REM PoSTtables actions for cumulative  export : record = N
REM
CREATE OR REPLACE VIEW exu81pstc AS
        SELECT  *
        FROM    sys.exu8pst
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu81tabc)
/
GRANT SELECT ON sys.exu81pstc TO SELECT_CATALOG_ROLE;

REM
REM 8.0 PoSTtables actions for incremental export : record = N
REM
CREATE OR REPLACE VIEW exu8psti AS
        SELECT  *
        FROM    sys.exu8pst
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8tabi)
/
GRANT SELECT ON sys.exu8psti TO SELECT_CATALOG_ROLE;

REM
REM 8.0 PoSTtables actions for cumulative  export : record = N
REM
CREATE OR REPLACE VIEW exu8pstc AS
        SELECT  *
        FROM    sys.exu8pst
        WHERE   (ownerid, tname) IN (
                    SELECT  ownerid, name
                    FROM    sys.exu8tabc)
/
GRANT SELECT ON sys.exu8pstc TO SELECT_CATALOG_ROLE;

REM
REM Version Control
REM
CREATE OR REPLACE VIEW exu8ver (
                version) AS
        SELECT  TO_NUMBER(value$)
        FROM    sys.props$
        WHERE   name = 'EXPORT_VIEWS_VERSION'
/
GRANT READ ON sys.exu8ver TO PUBLIC;

REM
REM Check for Procedural and Replication Options (obsolete in 8.0.4)
REM
CREATE OR REPLACE VIEW exu8cpo (
                parameter, value) AS
        SELECT  parameter, DECODE(value, 'TRUE', 1, 'FALSE', 0, 2)
        FROM    sys.v$option
        WHERE   parameter IN ('procedural', 'replication')
/
GRANT READ ON sys.exu8cpo TO PUBLIC;

REM
REM Check for non-exportable objects for all users
REM
CREATE OR REPLACE VIEW exu8nxp (
                ownerid, owner, name, type) AS
        SELECT  u$.user#, n$.owner, n$.name, n$.obj_type
        FROM    sys.noexp$ n$, sys.user$ u$
        WHERE   n$.owner = u$.name
/
GRANT SELECT ON sys.exu8nxp TO SELECT_CATALOG_ROLE;

REM
REM Check for non-exportable objects for current user
REM
CREATE OR REPLACE VIEW exu8nxpu AS
        SELECT  owner, name, type
        FROM    sys.exu8nxp
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8nxpu TO PUBLIC;

REM
REM obtain types of top level columns of a table
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8typt (
                tname, towner, ownerid, toid, mtime, typobjno, tabobjno,
                audit$, sqlver, property,
                typobjstatus, tversion, thashcode, deporder, typeid,
                roottoid) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, c.obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, d.order#, t.typeid,
                NVL(t.roottoid,HEXTORAW('00'))
        FROM    sys.coltype$ c, sys.user$ u, sys.obj$ o, sys.type$ t,
                sys.type_misc$ tm, sys.exu816sqv sv, sys.dependency$ d
        WHERE   t.toid = c.toid AND
                o.oid$ = c.toid AND
                u.user# = o.owner# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                NVL(o.type#, -1) != 10 AND
                t.toid  = t.tvoid AND                    /* Latest type only */
                o.spare1 = sv.version# (+) AND
                c.obj# = d.d_obj# AND
                d.p_obj# = o.obj#
/
GRANT SELECT ON sys.exu8typt TO SELECT_CATALOG_ROLE;

REM
REM obtain types of top level columns of a table (9.2+)
REM  possibly having PUBLIC type synonyms
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu9typt (
                tname, towner, ownerid, toid, mtime, typobjno, tabobjno,
                audit$, sqlver, property,
                typobjstatus, tversion, thashcode, synobjno, colsynobjno ) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, c.obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, sy.obj#, c.synobj#
        FROM    sys.coltype$ c, sys.user$ u, sys.obj$ o, sys.type$ t,
                sys.type_misc$ tm, sys.exu816sqv sv, sys.obj$ ne, sys.obj$ sy
        WHERE   t.toid = c.toid AND
                o.oid$ = c.toid AND
                u.user# = o.owner# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                NVL(o.type#, -1) != 10 AND
                t.toid  = t.tvoid AND                    /* Latest type only */
                o.spare1 = sv.version# (+) AND
                ne.obj# = c.synobj#  AND /* non_exist (neg depend) */
                sy.name = ne.name AND
                sy.owner# = 1 AND  /* PUBLIC */
                sy.type# = 5 /* SYNONYM */
/
GRANT SELECT ON sys.exu9typt TO SELECT_CATALOG_ROLE;

REM
REM obtain types of top level columns of a table (9.2+)
REM  possibly having PRIVATE type synonyms
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu9typt2 (
                tname, towner, ownerid, toid, mtime, typobjno, tabobjno,
                audit$, sqlver, property,
                typobjstatus, tversion, thashcode, synobjno, colsynobjno ) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, c.obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, c.synobj#, c.synobj# 
        FROM    sys.coltype$ c, sys.user$ u, sys.obj$ o, sys.type$ t,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   t.toid = c.toid AND
                o.oid$ = c.toid AND
                u.user# = o.owner# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                NVL(o.type#, -1) != 10 AND
                t.toid  = t.tvoid AND                    /* Latest type only */
                o.spare1 = sv.version# (+) 
/
GRANT SELECT ON sys.exu9typt2 TO SELECT_CATALOG_ROLE;

REM
REM User's view
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8typtu (
                tname, towner, ownerid, toid, mtime, typobjno, tabobjno,
                audit$, sqlver, property,
                typobjstatus, tversion, thashcode, deporder, typeid,
                roottoid) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, c.obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, d.order#, t.typeid,
                NVL(t.roottoid,HEXTORAW('00')) 
        FROM    sys.coltype$ c, sys.user$ u, sys.obj$ o, sys.type$ t,
                sys.type_misc$ tm, sys.exu816sqv sv, sys.dependency$ d
        WHERE   t.toid = c.toid AND
                o.oid$ = c.toid AND
                u.user# = o.owner# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND/* skip system gen'd types */
                t.toid  = t.tvoid AND                    /* Latest type only */
                NVL(o.type#, -1) != 10 AND
                c.obj# = d.d_obj# AND 
                d.p_obj# = o.obj# AND
                (o.owner# = userenv('SCHEMAID') OR                  /* owned by current user */
                /* current user or public role have execute access to type */
                o.obj# IN (
                    SELECT  oa.obj#
                    FROM    sys.objauth$ oa
                    WHERE   oa.obj# = o.obj# AND
                            oa.privilege# = 12 AND                /* execute */
                            oa.grantee# IN (userenv('SCHEMAID'), 1)) OR
                EXISTS ( /* current user or public role can execute any type */
                    SELECT  NULL
                    FROM    sys.sysauth$ sa
                    WHERE   sa.grantee# IN (userenv('SCHEMAID'), 1) AND
                            sa.privilege# = -184)) AND
                o.spare1 = sv.version# (+)
/
GRANT READ ON sys.exu8typtu TO PUBLIC;

REM
REM User's view (9.2+)
REM
REM obtain types of top level columns of a table (9.2+)
REM  possibly having PUBLIC type synonyms
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu9typtu (
                tname, towner, ownerid, toid, mtime, typobjno, tabobjno,
                audit$, sqlver, property,
                typobjstatus, tversion, thashcode, synobjno, colsynobjno) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, c.obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, sy.obj#, c.synobj#
        FROM    sys.coltype$ c, sys.user$ u, sys.obj$ o, sys.type$ t,
                sys.type_misc$ tm, sys.exu816sqv sv, sys.obj$ ne, sys.obj$ sy
        WHERE   t.toid = c.toid AND
                o.oid$ = c.toid AND
                u.user# = o.owner# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND/* skip system gen'd types */
                t.toid  = t.tvoid AND                    /* Latest type only */
                NVL(o.type#, -1) != 10 AND
                (o.owner# = userenv('SCHEMAID') OR                  /* owned by current user */
                /* current user or public role have execute access to type */
                o.obj# IN (
                    SELECT  oa.obj#
                    FROM    sys.objauth$ oa
                    WHERE   oa.obj# = o.obj# AND
                            oa.privilege# = 12 AND                /* execute */
                            oa.grantee# IN (userenv('SCHEMAID'), 1)) OR
                EXISTS ( /* current user or public role can execute any type */
                    SELECT  NULL
                    FROM    sys.sysauth$ sa
                    WHERE   sa.grantee# IN (userenv('SCHEMAID'), 1) AND
                            sa.privilege# = -184)) AND
                o.spare1 = sv.version# (+) AND
                ne.obj# = c.synobj#  AND /* non_exist (neg depend) */
                sy.name = ne.name AND
                sy.owner# = 1 AND  /* PUBLIC */
                sy.type# = 5 /* SYNONYM */
/
GRANT READ ON sys.exu9typtu TO PUBLIC;

REM
REM User's view (9.2+)
REM
REM obtain types of top level columns of a table (9.2+)
REM  possibly having PRIVATE type synonyms
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu9typtu2 (
                tname, towner, ownerid, toid, mtime, typobjno, tabobjno,
                audit$, sqlver, property,
                typobjstatus, tversion, thashcode, synobjno, colsynobjno) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, c.obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, c.synobj#, c.synobj# 
        FROM    sys.coltype$ c, sys.user$ u, sys.obj$ o, sys.type$ t,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   t.toid = c.toid AND
                o.oid$ = c.toid AND
                u.user# = o.owner# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND/* skip system gen'd types */
                t.toid  = t.tvoid AND                    /* Latest type only */
                NVL(o.type#, -1) != 10 AND
                (o.owner# = userenv('SCHEMAID') OR                  /* owned by current user */
                /* current user or public role have execute access to type */
                o.obj# IN (
                    SELECT  oa.obj#
                    FROM    sys.objauth$ oa
                    WHERE   oa.obj# = o.obj# AND
                            oa.privilege# = 12 AND                /* execute */
                            oa.grantee# IN (userenv('SCHEMAID'), 1)) OR
                EXISTS ( /* current user or public role can execute any type */
                    SELECT  NULL
                    FROM    sys.sysauth$ sa
                    WHERE   sa.grantee# IN (userenv('SCHEMAID'), 1) AND
                            sa.privilege# = -184)) AND
                o.spare1 = sv.version# (+) 
/
GRANT READ ON sys.exu9typtu2 TO PUBLIC;

REM
REM obtain parent types and subtypes, given a type
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8fpt (
                tname, towner, ownerid, toid, mtime, objno, dobjno, audit$,
                sqlver, property, typobjstatus, tversion, thashcode, typeid,
                roottoid) AS
                /* Parent types */
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, d.d_obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, t.typeid,
                NVL(t.roottoid,HEXTORAW('00'))
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.dependency$ d,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   o.obj# = d.p_obj# AND
                o.type# = 13 AND
                o.oid$ = t.toid AND
                o.owner# = u.user# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                o.spare1 = sv.version# (+) AND
                t.toid = t.tvoid                     /* Only the latest type */
     UNION      /* Subtypes */
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime,  'YYYY-MM-DD:HH24:MI:SS'), o.obj#, so.obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, t.typeid,
                NVL(t.roottoid,HEXTORAW('00'))
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.obj$ so,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   o.type# = 13 AND
                o.oid$ = t.toid AND
                o.owner# = u.user# AND
                so.oid$ = t.roottoid AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                o.spare1 = sv.version# (+) AND
                t.toid = t.tvoid                     /* Only the latest type */
/
GRANT SELECT ON sys.exu8fpt TO SELECT_CATALOG_ROLE;

REM
REM User's view
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8fptu (
                tname, towner, ownerid, toid, mtime, objno, dobjno, audit$,
                sqlver, property, typobjstatus, tversion, thashcode, typeid,
                roottoid) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, d.d_obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, t.typeid,
                NVL(t.roottoid,HEXTORAW('00'))
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.dependency$ d,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   o.obj# = d.p_obj# AND
                o.type# = 13 AND
                o.oid$ = t.toid AND
                o.owner# = u.user# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                (o.owner# = userenv('SCHEMAID') OR                  /* owned by current user */
                /* current user or public role have execute access to type */
                o.obj# IN (
                    SELECT  oa.obj#
                    FROM    sys.objauth$ oa
                    WHERE   oa.obj# = o.obj# AND
                            oa.privilege# = 12 AND                /* execute */
                            oa.grantee# IN (userenv('SCHEMAID'), 1)) OR
                EXISTS ( /* current user or public role can execute any type */
                    SELECT  NULL
                    FROM    sys.sysauth$ sa
                    WHERE   sa.grantee# IN (userenv('SCHEMAID'), 1) AND
                            sa.privilege# = -184)) AND
                o.spare1 = sv.version# (+) AND
                t.toid   = t.tvoid                   /* Only the latest type */
     UNION
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime,  'YYYY-MM-DD:HH24:MI:SS'), o.obj#, so.obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, t.typeid,
                NVL(t.roottoid,HEXTORAW('00'))
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.obj$ so,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   o.type# = 13 AND
                o.oid$ = t.toid AND
                o.owner# = u.user# AND
                so.oid$ = t.roottoid AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                (o.owner# = userenv('SCHEMAID') OR                  /* owned by current user */
                /* current user or public role have execute access to type */
                o.obj# IN (
                        SELECT  oa.obj#
                        FROM    sys.objauth$ oa
                        WHERE   oa.obj# = o.obj# AND
                                oa.privilege# = 12 AND            /* execute */
                                (oa.grantee# = userenv('SCHEMAID') OR
                                 oa.grantee# = 1)) OR
                /* current user or public role can execute any type */
                EXISTS (
                        SELECT  NULL
                        FROM    sys.sysauth$ sa
                        WHERE   (sa.grantee# = userenv('SCHEMAID') OR
                                 sa.grantee# = 1) AND
                                sa.privilege# = -184 )) AND
                o.spare1 = sv.version# (+)  AND
                t.toid   = t.tvoid                   /* Only the latest type */
/
GRANT READ ON sys.exu8fptu TO PUBLIC;

REM
REM obtain type body object number and audit, from type name and schema name
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu8typb (
                tname, towner, townerid, objno, sqlver) AS
        SELECT  o.name, u.name, o.owner#, o.obj#, sv.sql_version
        FROM    sys.obj$ o, sys.user$ u, sys.exu816sqv sv
        WHERE   o.type# = 14 AND
                u.user# = o.owner# AND
                o.spare1 = sv.version# (+)
/
GRANT SELECT ON sys.exu8typb TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8typbu AS
        SELECT  *
        FROM    sys.exu8typb
        WHERE   townerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8typbu TO PUBLIC;

REM
REM obtain info on all types
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu9typ (
                tname, towner, ownerid, toid, mtime, objno, audit$,
                secondaryobj, sqlver, typobjstatus, tversion, thashcode,
                typeid, roottoid) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, tm.audit$,
                DECODE(BITAND(o.flags, 16), 16, 1, 0), sv.sql_version,
                o.status, t.version#, t.hashcode, t.typeid, 
                NVL(t.roottoid,HEXTORAW('00'))
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.type_misc$ tm,
                sys.exu816sqv sv
        WHERE   o.type# = 13 AND
                o.oid$ = t.toid AND
                u.user# = o.owner# AND
                tm.obj# = o.obj# AND
                t.toid  = t.tvoid AND                 /* Only the latest rev */
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                u.name NOT IN ('ORDSYS', 'MDSYS', 'CTXSYS', 'ORDPLUGINS',
                               'LBACSYS', 'XDB', 'SI_INFORMTN_SCHEMA',
                               'DIP', 'DBSNMP', 'EXFSYS', 'WMSYS','ORACLE_OCM', 
                               'ANONYMOUS', 'XS$NULL', 'APPQOSSYS',
                               'OJVMSYS', 'SYSBACKUP', 'SYSDG', 'SYSRAC', 'SYSKM', 
                               'DVSYS', 'DVF', 'DBHADOOP', 'ORDDATA',
                               'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                               'LOGSTDBY_ADMINISTRATOR','OLAPSYS','FLOWS_FILES',
                               'APEX_050000','APEX_040200','GGSYS') AND
                o.spare1 = sv.version# (+)
/
GRANT SELECT ON sys.exu9typ TO SELECT_CATALOG_ROLE;

REM
REM obtain info on types for current user
REM
CREATE OR REPLACE VIEW exu9typu AS
        SELECT  *
        FROM    sys.exu9typ
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu9typu TO PUBLIC;

REM
REM obtain info on all types
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu81typ (
                tname, towner, ownerid, toid, mtime, objno, audit$,
                secondaryobj, sqlver, typobjstatus, tversion, thashcode) AS
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, tm.audit$,
                DECODE(BITAND(o.flags, 16), 16, 1, 0), sv.sql_version,
                o.status, t.version#, t.hashcode
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.type_misc$ tm,
                sys.exu816sqv sv
        WHERE   o.type# = 13 AND
                o.oid$ = t.toid AND
                u.user# = o.owner# AND
                tm.obj# = o.obj# AND
                t.toid  = t.tvoid AND                 /* Only the latest rev */
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                u.name NOT IN ('ORDSYS', 'MDSYS', 'CTXSYS', 'ORDPLUGINS',
                               'LBACSYS', 'XDB',  'SI_INFORMTN_SCHEMA',
                               'DIP', 'DBSNMP', 'EXFSYS', 'WMSYS','ORACLE_OCM',
                               'ANONYMOUS', 'XS$NULL', 'APPQOSSYS',
                               'OJVMSYS', 'SYSBACKUP', 'SYSDG', 'SYSRAC', 'SYSKM', 
                               'DVSYS', 'DVF', 'DBHADOOP', 'ORDDATA',
                               'GSMADMIN_INTERNAL', 'GSMUSER', 'GSMCATUSER',
                               'LOGSTDBY_ADMINISTRATOR','OLAPSYS','FLOWS_FILES',
                               'APEX_050000','APEX_040200','GGSYS') AND
                o.spare1 = sv.version# (+) AND
                BITAND(t.properties, 8) = 0 AND           /* skip NOT FINAL */
                BITAND(t.properties, 8192) = 0             /* skip subtypes */
/
GRANT SELECT ON sys.exu81typ TO SELECT_CATALOG_ROLE;

REM
REM obtain info on types for current user
REM
CREATE OR REPLACE VIEW exu81typu AS
        SELECT  *
        FROM    sys.exu81typ
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81typu TO PUBLIC;

REM
REM V8.0 type view, exu8typ must be subseted from exu81typ in order to filter
REM out types marked 'secondary object'.
REM
CREATE OR REPLACE VIEW exu8typ AS
        SELECT  *
        FROM    sys.exu81typ
        WHERE   secondaryobj = 0
/
GRANT SELECT ON sys.exu8typ TO SELECT_CATALOG_ROLE;

REM
REM obtain info on types for current user
REM
CREATE OR REPLACE VIEW exu8typu AS
        SELECT  *
        FROM    sys.exu8typ
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8typu TO PUBLIC;

REM
REM obtain parent types given a type
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu92fptp (
                tname, towner, ownerid, toid, mtime, objno, dobjno, audit$,
                sqlver, property, typobjstatus, tversion, thashcode, deporder,
                typeid, roottoid) AS
                /* Parent types */
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, d.d_obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, d.order#, t.typeid,
                NVL(t.roottoid,HEXTORAW('00'))
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.dependency$ d,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   o.obj# = d.p_obj# AND
                o.type# = 13 AND
                o.oid$ = t.toid AND
                o.owner# = u.user# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                o.spare1 = sv.version# (+) AND
                t.toid = t.tvoid                     /* Only the latest type */
/
GRANT SELECT ON sys.exu92fptp TO SELECT_CATALOG_ROLE;

REM
REM User's view
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu92fptpu (
                tname, towner, ownerid, toid, mtime, objno, dobjno, audit$,
                sqlver, property, typobjstatus, tversion, thashcode, deporder,
                typeid, roottoid)
                AS
                /* Parent types */
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, d.d_obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, d.order#, t.typeid,
                NVL(t.roottoid,HEXTORAW('00'))
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.dependency$ d,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   o.obj# = d.p_obj# AND
                o.type# = 13 AND
                o.oid$ = t.toid AND
                o.owner# = u.user# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                (o.owner# = userenv('SCHEMAID') OR                  /* owned by current user */
                /* current user or public role have execute access to type */
                o.obj# IN (
                    SELECT  oa.obj#
                    FROM    sys.objauth$ oa
                    WHERE   oa.obj# = o.obj# AND
                            oa.privilege# = 12 AND                /* execute */
                            oa.grantee# IN (userenv('SCHEMAID'), 1)) OR
                EXISTS ( /* current user or public role can execute any type */
                    SELECT  NULL
                    FROM    sys.sysauth$ sa
                    WHERE   sa.grantee# IN (userenv('SCHEMAID'), 1) AND
                            sa.privilege# = -184)) AND
                o.spare1 = sv.version# (+) AND
                t.toid   = t.tvoid                   /* Only the latest type */
/
GRANT READ ON sys.exu92fptpu TO PUBLIC;

REM
REM obtain parent types and subtypes, given a type
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu92fpt (
                tname, towner, ownerid, toid, mtime, objno, dobjno, audit$,
                sqlver, property, typobjstatus, tversion, thashcode, deporder,
                typeid, roottoid, tabobjno)
                AS
                /* Parent types */
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, d.d_obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, d.order#, t.typeid,
                NVL(t.roottoid,HEXTORAW('00')), 0
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.dependency$ d,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   o.obj# = d.p_obj# AND
                o.type# = 13 AND
                o.oid$ = t.toid AND
                o.owner# = u.user# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                o.spare1 = sv.version# (+) AND
                t.toid = t.tvoid                     /* Only the latest type */
     UNION      /* Subtypes */
        SELECT  sto.name, u.name, sto.owner#, t.toid,
                TO_CHAR(sto.mtime,  'YYYY-MM-DD:HH24:MI:SS'), sto.obj#, 
                d.p_obj#, tm.audit$, sv.sql_version, t.properties,
                sto.status, t.version#, t.hashcode, d.order#, t.typeid,
                NVL(t.roottoid,HEXTORAW('00')), tabobj.obj#
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.obj$ sto,
                /*   o.obj$ is for the type is question */
                /* sto.obj$ is for the Sub Types of o.obj$ */
                sys.type_misc$ tm, sys.exu816sqv sv, sys.dependency$ d,
                sys.obj$ tabobj, sys.dependency$ d2, dependency$ d3
        WHERE   o.obj# = d.p_obj# AND
                o.type# = 13 AND
                sto.type# = 13 AND
                sto.oid$ = t.toid AND
                sto.owner# = u.user# AND
                sto.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                sto.spare1 = sv.version# (+) AND
                t.toid = t.tvoid AND                 /* Only the latest type */
                sto.obj# = d.d_obj# AND
                d.p_obj#  = d2.p_obj# AND /*dependent type related to a table*/
                d2.d_obj# = tabobj.obj# AND 
                tabobj.type# = 2 AND
                sto.obj# = d3.p_obj# AND /* subtype related to same table */
                d3.d_obj# = tabobj.obj#
/
GRANT SELECT ON sys.exu92fpt TO SELECT_CATALOG_ROLE;

REM
REM User's view
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu92fptu (
                tname, towner, ownerid, toid, mtime, objno, dobjno, audit$,
                sqlver, property, typobjstatus, tversion, thashcode, deporder,
                typeid, roottoid, tabobjno)
                AS
                /* Parent types */
        SELECT  o.name, u.name, o.owner#, t.toid,
                TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o.obj#, d.d_obj#,
                tm.audit$, sv.sql_version, t.properties,
                o.status, t.version#, t.hashcode, d.order#, t.typeid,
                NVL(t.roottoid,HEXTORAW('00')), 0
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.dependency$ d,
                sys.type_misc$ tm, sys.exu816sqv sv
        WHERE   o.obj# = d.p_obj# AND
                o.type# = 13 AND
                o.oid$ = t.toid AND
                o.owner# = u.user# AND
                o.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                (o.owner# = userenv('SCHEMAID') OR                  /* owned by current user */
                /* current user or public role have execute access to type */
                o.obj# IN (
                    SELECT  oa.obj#
                    FROM    sys.objauth$ oa
                    WHERE   oa.obj# = o.obj# AND
                            oa.privilege# = 12 AND                /* execute */
                            oa.grantee# IN (userenv('SCHEMAID'), 1)) OR
                EXISTS ( /* current user or public role can execute any type */
                    SELECT  NULL
                    FROM    sys.sysauth$ sa
                    WHERE   sa.grantee# IN (userenv('SCHEMAID'), 1) AND
                            sa.privilege# = -184)) AND
                o.spare1 = sv.version# (+) AND
                t.toid   = t.tvoid                   /* Only the latest type */
     UNION      /* Subtypes */
        SELECT  sto.name, u.name, sto.owner#, t.toid,
                TO_CHAR(sto.mtime,  'YYYY-MM-DD:HH24:MI:SS'), sto.obj#, 
                d.p_obj#, tm.audit$, sv.sql_version, t.properties,
                sto.status, t.version#, t.hashcode, d.order#, t.typeid,
                NVL(t.roottoid,HEXTORAW('00')), tabobj.obj#
        FROM    sys.obj$ o, sys.user$ u, sys.type$ t, sys.obj$ sto,
                /*   o.obj$ is for the type is question */
                /* sto.obj$ is for the Sub Types of o.obj$ */
                sys.type_misc$ tm, sys.exu816sqv sv, sys.dependency$ d,
                sys.obj$ tabobj, sys.dependency$ d2, dependency$ d3
        WHERE   o.obj# = d.p_obj# AND
                o.type# = 13 AND
                sto.type# = 13 AND 
                sto.oid$ = t.toid AND
                sto.owner# = u.user# AND
                sto.obj# = tm.obj# AND
                BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
                (sto.owner# = userenv('SCHEMAID') OR                /* owned by current user */
                /* current user or public role have execute access to type */
                sto.obj# IN (
                        SELECT  oa.obj#
                        FROM    sys.objauth$ oa
                        WHERE   oa.obj# = sto.obj# AND
                                oa.privilege# = 12 AND            /* execute */
                                (oa.grantee# = userenv('SCHEMAID') OR
                                 oa.grantee# = 1)) OR
                /* current user or public role can execute any type */
                EXISTS (
                        SELECT  NULL
                        FROM    sys.sysauth$ sa
                        WHERE   (sa.grantee# = userenv('SCHEMAID') OR
                                 sa.grantee# = 1) AND
                                sa.privilege# = -184 )) AND
                sto.spare1 = sv.version# (+) AND
                t.toid = t.tvoid AND                 /* Only the latest type */
                sto.obj# = d.d_obj# AND
                d.p_obj#  = d2.p_obj# AND /*dependent type related to a table*/
                d2.d_obj# = tabobj.obj# AND 
                tabobj.type# = 2 AND
                sto.obj# = d3.p_obj# AND /* subtype related to same table */
                d3.d_obj# = tabobj.obj#
/
GRANT READ ON sys.exu92fptu TO PUBLIC;

REM
REM XML/XDB schema based view of TYPEs referenced by a TABLE
REM Return the TYPE info for types that an XDB schema depends on
REM
CREATE OR REPLACE VIEW exu102xtyp (
        typename, typeowner, typownid, typobj#, 
        toid, mtime, typeaudit, 
        property, status, version, hashcode, 
        typeid, roottoid, 
        tabobjno ) 
        AS
        SELECT o.name, u.name, o.owner#, o.obj#, 
               t.toid, TO_CHAR(o.mtime, 'YYYY-MM-DD:HH24:MI:SS'), tm.audit$, 
               t.properties, o.status, t.version#, t.hashcode,
               NVL(t.typeid,HEXTORAW('00')), NVL(t.roottoid,HEXTORAW('00')), 
               tabo.obj#
        FROM sys.user$ u, sys.obj$ o, sys.type$ t,sys.type_misc$ tm, 
             sys.dependency$ d, sys.exu816sqv sv, sys.obj$ tabo
        WHERE t.toid = o.oid$ AND
              u.user# = o.owner# AND
              o.obj# = tm.obj# AND
              BITAND(t.properties, 2128) = 0 AND /* skip system gen'd types*/
              NVL(o.type#, -1) != 10 AND
              t.toid  = t.tvoid AND                    /* Latest type only */
              o.spare1 = sv.version# (+) AND
              d.p_obj# = o.obj# AND
              tabo.type# = 2 AND /* table */
              d.d_obj# IN /* get XDB schema objs that table depends on */
              (SELECT d.p_obj# 
               FROM SYS.DEPENDENCY$ d, SYS.obj$ o
               WHERE d.d_obj# = tabo.obj# AND  /* dependent object is Table */
                     d.p_obj# = o.obj# AND /* parent object is XDB schema */
                     o.type# = 55) AND 
              o.obj# NOT IN /* ignore TYPEs that we already know about */
              (SELECT typobjno
               FROM sys.exu8typt
               WHERE tabobjno = tabo.obj#)
/
GRANT SELECT ON exu102xtyp to SELECT_CATALOG_ROLE;

REM
REM obtain info on XDB types for current user
REM
CREATE OR REPLACE VIEW exu102xtypu AS
        SELECT  *
        FROM    sys.exu102xtyp
        WHERE   typownid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu102xtypu TO PUBLIC;

REM
REM XMLSchemaTable view
REM Return the schemaoids from sys.opqtype$ for the passed in object#
REM (table).  Return only the items owned by the currently connected user.
REM
REM This view looks for XML schema types both directly in the table and
REM in nested tables at any level.
REM
CREATE OR REPLACE VIEW exu9xmlst (schemaoid, tobjid ) AS
        SELECT RAWTOHEX(opq.schemaoid), o.obj#
        FROM sys.opqtype$ opq, sys.obj$ o
        WHERE (o.obj# = opq.obj# OR 
               opq.obj# IN (    SELECT  nt.ntab#
                                FROM    sys.ntab$ nt
                                START WITH nt.obj# = o.obj#
                                CONNECT BY PRIOR nt.ntab# = nt.obj#)) AND
              opq.type = 1 AND                                   /* XML Type */
              BITAND(opq.flags, 2) = 2                          /* XMLSchema */
/
GRANT READ ON sys.exu9xmlst TO PUBLIC;

REM get the opqtype$ flags for xmltype - used to detect binary xml
CREATE OR REPLACE VIEW exu11xml (tobjid, flags ) AS
        SELECT o.obj#, opq.flags
        FROM sys.opqtype$ opq, sys.obj$ o
        WHERE (o.obj# = opq.obj# OR
               opq.obj# IN (    SELECT  nt.ntab#
                                FROM    sys.ntab$ nt
                                START WITH nt.obj# = o.obj#
                                CONNECT BY PRIOR nt.ntab# = nt.obj#)) AND
              opq.type = 1 AND                                   /* XML Type */
              BITAND(opq.flags, 4) = 4                         /* BINARY XML */
/
GRANT READ ON sys.exu11xml TO PUBLIC;

CREATE OR REPLACE VIEW exu9xdbuid (xdb_uid) AS
        SELECT r$.schema#
        FROM sys.registry$ r$ 
        WHERE r$.cid = 'XDB'
/
GRANT READ ON sys.exu9xdbuid TO PUBLIC;


REM
REM Add directory object IDR_DIR to noexp$ 
REM lrg 2612315
REM

INSERT INTO sys.noexp$ ( owner, name, obj_type ) VALUES
('SYS', 'IDR_DIR', 23)
/

REM
REM obtain all directory aliases
REM
CREATE OR REPLACE VIEW exu8dir (
                dirname, pathname, objno, audit$) AS
        SELECT  o$.name, d$.os_path, o$.obj#,
                substr(d$.audit$, 1, 1)  ||  substr(d$.audit$, 2, 1)   || /* ALTER */
                substr(d$.audit$, 3, 1)  ||  substr(d$.audit$, 4, 1)   || /* AUDIT */
                substr(d$.audit$, 5, 1)  ||  substr(d$.audit$, 6, 1)   || /* COMMENT */
                substr(d$.audit$, 7, 1)  ||  substr(d$.audit$, 8, 1)   || /* DELETE */
                substr(d$.audit$, 9, 1)  ||  substr(d$.audit$, 10, 1)  || /* GRANT */
                substr(d$.audit$, 11, 1) ||  substr(d$.audit$, 12, 1)  || /* INDEX */
                substr(d$.audit$, 13, 1) ||  substr(d$.audit$, 14, 1)  || /* INSERT */
                substr(d$.audit$, 15, 1) ||  substr(d$.audit$, 16, 1)  || /* LOCK */
                substr(d$.audit$, 17, 1) ||  substr(d$.audit$, 18, 1)  || /* RENAME */
                substr(d$.audit$, 19, 1) ||  substr(d$.audit$, 20, 1)  || /* SELECT */
                substr(d$.audit$, 21, 1) ||  substr(d$.audit$, 22, 1)  || /* UPDATE */
                '--'                                                   || /* REFERENCES */
                substr(d$.audit$, 25, 1) ||  substr(d$.audit$, 26, 1)  || /* EXECUTE */
                substr(d$.audit$, 27, 1) ||  substr(d$.audit$, 28, 1)  || /* CREATE */
                substr(d$.audit$, 35, 1) ||  substr(d$.audit$, 36, 1)  || /* READ */
                substr(d$.audit$, 37, 1) ||  substr(d$.audit$, 38, 1)     /* WRITE */
        FROM    sys.exu81obj o$, sys.dir$ d$
        WHERE   o$.type# = 23 AND                       /* directory aliases */
                o$.obj# = d$.obj# AND
        NOT EXISTS (
            SELECT  owner, name
            FROM    sys.noexp$ ne$
            WHERE   ne$.name = o$.name AND
                    ne$.obj_type = 23)
/
GRANT SELECT ON sys.exu8dir TO SELECT_CATALOG_ROLE;

REM
REM obtain all foreign function library names
REM
CREATE OR REPLACE VIEW exu8lib (
                lowner, libname, ownerid, filename, audit$, mtime, objno,
                isstatic, istrusted) AS
        SELECT  u$.name, o$.name, o$.owner#, lb$.filespec, lb$.audit$,
                TO_CHAR(o$.mtime, 'YYYY-MM-DD:HH24:MI:SS'), o$.obj#,
                DECODE(BITAND(lb$.property, 1), 1, 1, 0),
                DECODE(BITAND(lb$.property, 2), 2, 1, 0)
        FROM    sys.exu81obj o$, sys.user$ u$, sys.library$ lb$
        WHERE   o$.type# = 22 AND                            /* library name */
                o$.owner# = u$.user# AND
                o$.obj# = lb$.obj#
/
GRANT SELECT ON sys.exu8lib TO SELECT_CATALOG_ROLE;

REM
REM obtain foreign function library names for user
REM
CREATE OR REPLACE VIEW exu8libu AS
        SELECT  *
        FROM    sys.exu8lib
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8libu TO PUBLIC;

REM
REM SCOPE and WITH ROWID information for REF columns/attributes
REM also returns any SCOPEd object objid and ref'd pkey cno/username if a pkREF
REM
CREATE OR REPLACE VIEW exu8rfs (
                objno, ownerid, property, colname, reftyp, soid, robjid,
                pkeycno, pkeyowner) AS
        SELECT  o$.obj#, o$.owner#, c$.property,
                DECODE(BITAND(c$.property, 1), 1, a$.name, c$.name),
                rf$.reftyp, NVL(rf$.stabid, HEXTORAW('00')),
                NVL2(rf$.stabid, (SELECT  ro$.obj#
                                  FROM    sys.obj$ ro$
                                  WHERE   ro$.oid$ = rf$.stabid),
                     0),
                DECODE(BITAND(rf$.reftyp, 4),
                       4, (SELECT  rcd$.con#
                           FROM    sys.obj$ ro$, sys.cdef$ rcd$
                           WHERE   ro$.oid$ = rf$.stabid AND
                                   rcd$.obj# = ro$.obj# AND
                                   rcd$.type# = 2),
                       0),
                DECODE(BITAND(rf$.reftyp, 4),
                       4, (SELECT  ru$.name
                           FROM    sys.obj$ ro$, sys.user$ ru$
                           WHERE   ro$.oid$ = rf$.stabid AND
                                   ru$.user# = ro$.owner#),
                       '')
        FROM    sys.refcon$ rf$, sys.obj$ o$, sys.col$ c$, sys.attrcol$ a$
        WHERE   rf$.obj# = o$.obj# AND
                rf$.obj# = c$.obj# AND
                rf$.intcol# = c$.intcol# AND
                rf$.obj# = a$.obj# (+) AND
                rf$.intcol# = a$.intcol# (+) AND
                rf$.reftyp != 0 AND
                BITAND(c$.property, 32768) != 32768     /* not unused column */
/
GRANT SELECT ON sys.exu8rfs TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8rfsu AS
        SELECT  *
        FROM    sys.exu8rfs
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8rfsu TO PUBLIC;

REM
REM exu8rfs(u) variation for user-defined REFs - obsoleted in 9.0.2
REM
REM Initial view included the sys.cdef$ table which broke export/import
REM cycle when SCOPE IS syntax was used for table constraints.
REM
CREATE OR REPLACE VIEW exu8orfs (
                objno, ownerid, property, colname, reftyp, soid, robjid, rname)
      AS
        SELECT  o$.obj#, o$.owner#, c$.property,
                DECODE(BITAND(c$.property, 1), 1, a$.name, c$.name),
                rf$.reftyp, rf$.stabid, ro$.obj#, ro$.name
        FROM    sys.refcon$ rf$, sys.obj$ o$, sys.col$ c$, sys.attrcol$ a$,
                sys.obj$ ro$
        WHERE   rf$.obj# = o$.obj# AND
                rf$.obj# = c$.obj# AND
                rf$.intcol# = c$.intcol# AND
                rf$.obj# = a$.obj# (+) AND
                rf$.intcol# = a$.intcol# (+) AND
                rf$.reftyp != 0 AND
                BITAND(c$.property, 32768) != 32768 AND /* not unused column */
                rf$.stabid = ro$.oid$ AND
                (userenv('SCHEMAID') IN (o$.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu8orfs TO PUBLIC;

REM
REM obtain parent table info for an inner nested table
REM
CREATE OR REPLACE VIEW exu8pnt (
                pobjno, pname, pownerid, cobjno) AS
        SELECT  nt$.obj#, o$.name, o$.owner#, nt$.ntab#
        FROM    sys.obj$ o$, sys.ntab$ nt$
        WHERE   nt$.obj# = o$.obj#
/
GRANT SELECT ON sys.exu8pnt TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu8pntu AS
        SELECT  *
        FROM    sys.exu8pnt
        WHERE   pownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu8pntu TO PUBLIC;

REM
REM bitmap, functional and domain indexes are included if the base table
REM is included or if the index is defined on a table, and that table
REM references a table that is included in the export.
REM
REM Note that the following 9 views do not handle references to inner
REM nested tables, since references to and from inner nested tables
REM are not currently supported by SQL.  Should SQL allow such references
REM in the future, these views will need to be modified.
REM
REM incremental export for bitmap, functional and domain indices
REM (used only when record = yes)
REM
CREATE OR REPLACE VIEW exu9indic AS
        SELECT  *
        FROM    sys.exu9ind
        WHERE   sysgenconst = 0 AND               /* not sys gen constraints */
                (bitmap = 1 OR                             /* select bitmap, */
                 BITAND(property, 16) = 16 OR                 /* functional, */
                 type = 9) AND                         /* and domain indexes */
                (iownerid, btname) IN ((
                    SELECT  i.owner#, i.name
                    FROM    sys.incexp i, sys.incvid v
                    WHERE   i.expid > v.expid AND
                            i.type# = 2)
                  UNION (
                    SELECT  r.ownerid, r.tname
                    FROM    sys.incexp ii, sys.incvid vv, sys.exu8ref r
                    WHERE              /*refs a table included in the export */
                            r.rtname = ii.name AND
                            r.rownerid = ii.owner# AND
                            ii.expid > vv.expid AND
                            ii.type# = 2))
/
GRANT SELECT ON sys.exu9indic TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81indic AS
        SELECT  *
        FROM    sys.exu9indic
/
GRANT SELECT ON sys.exu81indic TO SELECT_CATALOG_ROLE;

REM
REM incremental export for bitmap indices in 8.0 (used only when record = yes)
REM
CREATE OR REPLACE VIEW exu8indic AS
        SELECT  *
        FROM    sys.exu81indic
        WHERE   BITAND(property, 16) != 16 AND/*Get bitmap but not functional*/
                type != 9                              /* nor domain indexes */
/
GRANT SELECT ON sys.exu8indic TO SELECT_CATALOG_ROLE;

REM
REM incremental export for bitmap, functional and domain indexes
REM note: exutabi will return the correct table name because record = no
REM
CREATE OR REPLACE VIEW exu9indi AS
        SELECT  *
        FROM    sys.exu9ind
        WHERE   sysgenconst = 0 AND                /* not sys gen constraint */
                (bitmap = 1 OR                             /* select bitmap, */
                 BITAND(property, 16) = 16 OR                 /* functional, */
                 type = 9) AND                         /* and domain indexes */
                (iownerid, btname) IN ((
                    SELECT  ownerid, name
                    FROM    sys.exu9tabi)
                  UNION (
                    SELECT  r.ownerid, r.tname
                    FROM    sys.exu9tabi ii, sys.exu8ref r
                    WHERE   r.robjid = ii.objid))   /* table included in inc */
/
GRANT SELECT ON sys.exu9indi TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81indi AS
        SELECT  *
        FROM    sys.exu81ind
        WHERE   sysgenconst = 0 AND                /* not sys gen constraint */
                (bitmap = 1 OR                             /* select bitmap, */
                 BITAND(property, 16) = 16 OR                 /* functional, */
                 type = 9) AND                         /* and domain indexes */
                (iownerid, btname) IN ((
                    SELECT  ownerid, name
                    FROM    sys.exu81tabi)
                  UNION (
                    SELECT  r.ownerid, r.tname
                    FROM    sys.exu9tabi ii, sys.exu8ref r
                    WHERE   r.robjid = ii.objid))   /* table included in inc */
/
GRANT SELECT ON sys.exu81indi TO SELECT_CATALOG_ROLE;

REM
REM incremental export for V8.0 bitmap indexes
REM
CREATE OR REPLACE VIEW exu8indi AS
        SELECT  *
        FROM    sys.exu81indi
        WHERE   BITAND(property, 16) != 16 AND/*Get bitmap but not functional*/
                type != 9                              /* nor domain indexes */
/
GRANT SELECT ON sys.exu8indi TO SELECT_CATALOG_ROLE;

REM
REM cumulative export for bitmap, functional and domain indexes
REM note: assume exutabc will return correct table name because record = no
REM
CREATE OR REPLACE VIEW exu9indc AS
        SELECT  *
        FROM    sys.exu9ind
        WHERE   sysgenconst = 0 AND                /* not sys gen constraint */
                (bitmap = 1 OR                             /* select bitmap, */
                 BITAND(property, 16) = 16 OR                 /* functional, */
                 type = 9) AND                         /* and domain indexes */
                (iownerid, btname) IN ((
                    SELECT  ownerid, name
                    FROM    sys.exu9tabc)
                  UNION (
                    SELECT  r.ownerid, r.tname
                    FROM    sys.exu81tabc cc, sys.exu8ref r
                    WHERE   r.robjid = cc.objid))   /* table included in cum */
/
GRANT SELECT ON sys.exu9indc TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu81indc AS
        SELECT  *
        FROM    sys.exu81ind
        WHERE   sysgenconst = 0 AND                /* not sys gen constraint */
                (bitmap = 1 OR                             /* select bitmap, */
                 BITAND(property, 16) = 16 OR                 /* functional, */
                 type = 9) AND                         /* and domain indexes */
                (iownerid, btname) IN ((
                    SELECT  ownerid, name
                    FROM    sys.exu81tabc)
                  UNION (
                    SELECT  r.ownerid, r.tname
                    FROM    sys.exu81tabc cc, sys.exu8ref r
                    WHERE   r.robjid = cc.objid))   /* table included in cum */
/
GRANT SELECT ON sys.exu81indc TO SELECT_CATALOG_ROLE;

REM
REM cumulative export for V8.0 bitmap indexes
REM
CREATE OR REPLACE VIEW exu8indc AS
        SELECT  *
        FROM    sys.exu81indc
        WHERE   BITAND(property, 16) != 16 AND/*Get bitmap but not functional*/
                type != 9                              /* nor domain indexes */
/
GRANT SELECT ON sys.exu8indc TO SELECT_CATALOG_ROLE;

REM
REM Operators
REM
REM Notes: sqlver obsolete in 9.0
REM
CREATE OR REPLACE VIEW exu81opr (
                name, objid, owner, ownerid, olevel, sqlver) AS
        SELECT  o.name, o.obj#, u.name, o.owner#, d.dlevel, sv.sql_version
        FROM    sys.exu81obj o, sys.user$ u, sys.operator$ op,
                sys.exu8ordop d, sys.exu816sqv sv
        WHERE   o.obj# = op.obj# AND
                o.owner# = u.user# AND
                o.obj# = d.obj#(+) AND
                o.spare1 = sv.version# (+)
/
GRANT SELECT ON sys.exu81opr TO SELECT_CATALOG_ROLE;

REM
REM Get operators for current user
REM
CREATE OR REPLACE VIEW exu81opru AS
        SELECT  *
        FROM    sys.exu81opr
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81opru TO PUBLIC;

REM
REM Get Operators for incremental export.
REM
CREATE OR REPLACE VIEW exu81opri AS
        SELECT  op.*
        FROM    sys.exu81opr op, sys.incexp i, sys.incvid v
        WHERE   op.name = i.name(+) AND
                op.ownerid = i.owner#(+) AND
                NVL(i.type#, 33) = 33 AND
                v.expid < NVL(i.expid, 9999)
/
GRANT SELECT ON sys.exu81opri TO SELECT_CATALOG_ROLE;

REM
REM Get Operators for cumulative export.
REM
CREATE OR REPLACE VIEW exu81oprc AS
        SELECT  op.*
        FROM    sys.exu81opr op, sys.incexp i, sys.incvid v
        WHERE   op.name = i.name(+) AND
                op.ownerid = i.owner#(+) AND
                NVL(i.type#, 33) = 33 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 v.expid < NVL(i.expid, 9999))
/
GRANT SELECT ON sys.exu81oprc TO SELECT_CATALOG_ROLE;

REM
REM Indextypes
REM
CREATE OR REPLACE VIEW exu81ity (
                name, objid, owner, ownerid) AS
        SELECT  o.name, o.obj#, u.name, o.owner#
        FROM    sys.exu81obj o, sys.user$ u, sys.indtypes$ i
        WHERE   o.obj# = i.obj# AND
                o.owner# = u.user#
/
GRANT SELECT ON sys.exu81ity TO SELECT_CATALOG_ROLE;

REM
REM Get Indextypes for current user
REM
CREATE OR REPLACE VIEW exu81ityu AS
        SELECT  *
        FROM    sys.exu81ity
        WHERE   ownerid = userenv('SCHEMAID')
/
GRANT READ ON sys.exu81ityu TO PUBLIC;

REM
REM Get Indextypes for incremental export.
REM
CREATE OR REPLACE VIEW exu81ityi AS
        SELECT  it.*
        FROM    sys.exu81ity it, sys.incexp i, sys.incvid v
        WHERE   it.name = i.name(+) AND
                it.ownerid = i.owner#(+) AND
                NVL(i.type#, 32) = 32 AND
                v.expid < NVL(i.expid, 9999)
/
GRANT SELECT ON sys.exu81ityi TO SELECT_CATALOG_ROLE;

REM
REM Get Indextypes for cumulative export.
REM
CREATE OR REPLACE VIEW exu81ityc AS
        SELECT  it.*
        FROM    sys.exu81ity it, sys.incexp i, sys.incvid v
        WHERE   it.name = i.name(+) AND
                it.ownerid = i.owner#(+) AND
                NVL(i.type#, 32) = 32 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 v.expid < NVL(i.expid, 9999))
/
GRANT SELECT ON sys.exu81ityc TO SELECT_CATALOG_ROLE;

REM
REM Get Row Level Security policies
REM
CREATE OR REPLACE VIEW exu81rls (
                objown, objnam, policy, polown, polsch, polfun, stmts, chkopt,
                enabled, spolicy) AS
        SELECT  u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
                DECODE(BITAND(r.stmt_type, 1), 0, '', 'SELECT,') ||
                DECODE(BITAND(r.stmt_type, 2), 0, '', 'INSERT,') ||
                DECODE(BITAND(r.stmt_type, 4), 0, '', 'UPDATE,') ||
                DECODE(BITAND(r.stmt_type, 8), 0, '', 'DELETE,'),
                r.check_opt, r.enable_flag,
                DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)
        FROM    sys.user$ u, sys.obj$ o, sys.rls$ r
        WHERE   u.user# = o.owner# AND
                r.obj# = o.obj# AND
                (userenv('SCHEMAID') IN (0, o.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu81rls TO PUBLIC;

REM
REM Add support for PFGAC to get driving context
REM
CREATE OR REPLACE VIEW exu9pct (
                namespace, attribute, objown, objnam) AS
        SELECT  c.ns, c.attr, u.name, o.name
        FROM    sys.rls_ctx$ c, sys.user$ u, sys.obj$ o
        WHERE   c.obj# = o.obj# AND
                u.user# = o.owner# AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9pct TO PUBLIC;

REM
REM Add support for PFGAC to get policy groups
REM
CREATE OR REPLACE VIEW exu9pgp (
                polgrp, objown, objnam) AS
        SELECT  g.gname, u.name, o.name
        FROM    sys.rls_grp$ g, sys.user$ u, sys.obj$ o
        WHERE   g.obj# = o.obj# AND
                u.user# = o.owner# AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9pgp TO PUBLIC;

REM
REM Add support for PFGAC to get RLS policies
REM
REM Get Row Level Security policies
REM
REM bug 7183899: add support for VPD policies with statement_type of "INDEX"
REM Merging the 7183899 issue in 11g(MAIN) but no need for the KQLDRST_DVT 
REM changes as VPD isn't used by DV in MAIN

CREATE OR REPLACE VIEW exu9rls (
                objown, objnam, polgrp, policy, polown, polsch, polfun, stmt,
                chkopt, enabled, spolicy, poltyp) AS
        SELECT  u.name, o.name, r.gname, r.pname, r.pfschma, r.ppname,
                r.pfname,
                DECODE(BITAND(r.stmt_type, 1), 0, '', 'SELECT,') ||
                DECODE(BITAND(r.stmt_type, 2), 0, '', 'INSERT,') ||
                DECODE(BITAND(r.stmt_type, 4), 0, '', 'UPDATE,') ||
                DECODE(BITAND(r.stmt_type, 8), 0, '', 'DELETE,') ||
                DECODE(BITAND(r.stmt_type, 2048), 0, '', 'INDEX,'),
                r.check_opt, r.enable_flag,
                DECODE(BITAND(r.stmt_type, 16), 0, 0, 1),
                case bitand(r.stmt_type,16)+
                     bitand(r.stmt_type,64)+
                     bitand(r.stmt_type,128)+
                     bitand(r.stmt_type,256)+ 
                     bitand(r.stmt_type,8192)+
                     bitand(r.stmt_type,16384)+
                     bitand(r.stmt_type,32768)+
                     bitand(r.stmt_type,524288)
                when 16 then 'DBMS_RLS.STATIC'
                when 64 then 'DBMS_RLS.SHARED_STATIC'
                when 128 then 'DBMS_RLS.CONTEXT_SENSITIVE'
                when 256 then 'DBMS_RLS.SHARED_CONTEXT_SENSITIVE'
                when 8192 then 'DBMS_RLS.XDS1'
                when 16384 then 'DBMS_RLS.XDS2'
                when 32768 then 'DBMS_RLS.XDS3'
                when 524288 then 'DBMS_RLS.OLS'
                else 'DBMS_RLS.DYNAMIC'
               end
        FROM    sys.user$ u, sys.obj$ o, sys.rls$ r
        WHERE   u.user# = o.owner# AND
                r.obj# = o.obj# AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9rls TO PUBLIC;

REM
REM Get all Dimensions
REM
CREATE OR REPLACE VIEW exu8dim (
                ownerid, owner, dimname, dimtext) AS
        SELECT  o.owner#, u.name, o.name, dm.dimtext
        FROM    sys.obj$ o, sys.user$ u, sys.dim$ dm
        WHERE   u.user# = o.owner# AND
                dm.obj# = o.obj# AND
                (userenv('SCHEMAID') IN (0, o.owner#) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu8dim TO PUBLIC;

REM
REM Get Dimensions for this user
REM
CREATE OR REPLACE VIEW exu8dimu AS
        SELECT  *
        FROM    sys.exu8dim
/
GRANT READ ON sys.exu8dimu TO PUBLIC;

REM
REM Get Dimensions for incremental export.
REM
CREATE OR REPLACE VIEW exu8dimi AS
        SELECT  dm.*
        FROM    sys.exu8dim dm, sys.incexp i, sys.incvid v
        WHERE   dm.dimname = i.name(+) AND
                dm.ownerid = i.owner#(+) AND
                NVL(i.type#, 43) = 43 AND
                v.expid < NVL(i.expid, 9999)
/
GRANT SELECT ON sys.exu8dimi TO SELECT_CATALOG_ROLE;

REM
REM Get Dimensions for Cumulative export.
REM
CREATE OR REPLACE VIEW exu8dimc AS
        SELECT  dm.*
        FROM    sys.exu8dim dm, sys.incexp i, sys.incvid v
        WHERE   dm.dimname = i.name(+) AND
                dm.ownerid = i.owner#(+) AND
                NVL(i.type#, 43) = 43 AND
                (NVL(i.ctime, TO_DATE('01-01-1900', 'DD-MM-YYYY')) < i.itime OR
                 v.expid < NVL(i.expid, 9999))
/
GRANT SELECT ON sys.exu8dimc TO SELECT_CATALOG_ROLE;

REM
REM All procedural objects. If the user has SELECT_CATALOG_ROLE, can see all
REM objects... otherwise, just his own.
REM
CREATE OR REPLACE VIEW exu81procobj (
                name, objid, owner, ownerid, type#, class, prepost, level#,
                package, pkg_schema) AS
        SELECT  o.name, o.obj#, u.name, o.owner#, o.type#, p.class, p.prepost,
                p.level#, p.package, p.schema
        FROM    sys.exu81obj o, sys.user$ u, sys.exppkgobj$ p
        WHERE   p.type# = o.type# AND
                o.owner# = u.user# AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu81procobj TO PUBLIC;

REM
REM All instance class procedural objects: These are objects dependent upon a
REM parent object.
REM
CREATE OR REPLACE VIEW exu81procobjinstance (
                name, objid, owner, ownerid, type#, class, prepost, level#,
                package, pkg_schema, par_name, par_objid, par_property) AS
        SELECT  o.name, o.objid, o.owner, o.ownerid, o.type#, o.class,
                o.prepost, o.level#, o.package, o.pkg_schema, op.name,
                d.p_obj#, t.property
        FROM    sys.exu81procobj o, sys.expdepobj$ d, sys.exu81obj op,
                sys.tab$ t
        WHERE   o.class = 3 AND
                d.d_obj# = o.objid AND
                d.p_obj# = op.obj# AND
                d.p_obj# = t.obj#
/
GRANT READ ON sys.exu81procobjinstance TO PUBLIC;

REM
REM Packages providing procedural object support.
REM
CREATE OR REPLACE VIEW exu81objectpkg (
                package, pkg_schema, class, type#, level#) AS
        SELECT  package, schema, class, type#, level#
        FROM    sys.exppkgobj$
/
GRANT READ ON sys.exu81objectpkg TO PUBLIC;

REM
REM Packages providing procedural actions
REM
CREATE OR REPLACE VIEW exu81actionpkg (
                package, pkg_schema, class, level#) AS
        SELECT  package, schema, class, level#
        FROM    sys.exppkgact$
/
GRANT READ ON sys.exu81actionpkg TO PUBLIC;

REM
REM Objects that have procedural actions associated with them. Users with
REM SELECT_CATALOG_ROLE or can see all objects; otherwise, just their own.
REM Return both class 3 and class 4 for this view.  Class 3 will 
REM ignore namespace and class when issuing callback.
REM
REM This view is used by exu81actionobj view.
REM 
CREATE OR REPLACE VIEW exu9actionobj (
                name, objid, owner, ownerid, property, type#, level#, 
                package, pkg_schema, namespace, class ) AS
        SELECT  o.name, d.obj#, u.name, o.owner#, t.property, o.type#,
                p.level#, p.package, p.schema, o.namespace, p.class
        FROM    sys.exu81obj o, sys.user$ u, sys.exppkgact$ p, sys.tab$ t,
                sys.expdepact$ d
        WHERE   d.obj# = o.obj# AND
                o.owner# = u.user# AND
                d.package = p.package AND
                d.schema = p.schema AND
                ((p.class = 3) OR (p.class = 4)) AND
                d.obj# = t.obj# AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9actionobj TO PUBLIC;

REM
REM For 8i view, we only return class = 3.  class 4 catagory added in 
REM 902 timeframe
REM 
CREATE OR REPLACE VIEW exu81actionobj (
                name, objid, owner, ownerid, property, type#, level#, package,
                pkg_schema) AS
        SELECT  oa.name, oa.objid, oa.owner, oa.ownerid, oa.property, 
                oa.type#, oa.level#, oa.package, oa.pkg_schema
        FROM    sys.exu9actionobj oa
        WHERE   oa.class = 3
/

GRANT READ ON sys.exu81actionobj TO PUBLIC;


REM
REM Get Collection Storage Compatibility Information
REM
REM v$compatibility is being removed with 10i, make sure this 
REM always returns 8.1.0.0.0
REM
CREATE OR REPLACE VIEW exu81csc (
                release) AS
        SELECT  '8.1.0.0.0'
        FROM    DUAL
/
GRANT READ ON sys.exu81csc TO PUBLIC;

REM
REM Enumerate tables in tablespace (for PITR and transportable ts modes)
REM Include tables that are either stored in the tablespace or whose 1st
REM (sub)partition is in the tablespace.  If a table is partitioned, but
REM its first partition is not stored in one of the PITR/TTS tablespaces,
REM it will not be returned through this query.  This will effectively drop
REM the partition when the TTS tablespaces are plugged back in.
REM If a secondary partition's tablespace is not in the TTS list, it will
REM be accounted for by the PL/SQL procedure that determines whether a TTS
REM is consistent.
REM
CREATE OR REPLACE VIEW exu81tts (
                dobjid, name, ownerid, tabno, clusterflag, tsname, hakan)
      AS                                             /* Unpartitioned tables */
        SELECT  NVL(t$.dataobj#, t$.obj#), o$.name, o$.owner#, NVL(t$.tab#, 0),
                NVL(t$.bobj#, 0), ts$.name, t$.spare1
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$
        WHERE   t$.obj# = o$.obj# AND
                t$.ts# = ts$.ts# AND
                BITAND(o$.flags, 128) != 128 AND       /* Recycle bin object */
                BITAND(t$.property, 64+512+8192) = 0    /* Not nested or IOT */
      UNION ALL                                   /* 1st Partition is simple */
        SELECT  t$.obj#, o$.name, o$.owner#, NVL(t$.tab#, 0), NVL(t$.bobj#, 0),
                ts$.name, t$.spare1
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$,
                (SELECT  bo#, 
                         MIN(ts#) KEEP (DENSE_RANK FIRST ORDER BY part#) ts#
                FROM     sys.tabpart$
                GROUP BY bo#) tp1$
        WHERE   t$.obj# = o$.obj# AND
                t$.obj# = tp1$.bo# AND
                tp1$.ts# = ts$.ts# AND
                BITAND(o$.flags, 128) != 128 AND
                BITAND(t$.property, 64+512+8192) = 0
      UNION ALL                           /* 1st Partition is subpartitioned */
        SELECT  t$.obj#, o$.name, o$.owner#, NVL(t$.tab#, 0), NVL(t$.bobj#, 0),
                ts$.name, t$.spare1
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$,
                (SELECT  tcp$.bo#,
                         MIN(tsp$.ts#) KEEP 
                           (DENSE_RANK FIRST ORDER BY 
                             tcp$.part#, tsp$.subpart#) ts#
                FROM     sys.tabcompart$ tcp$, sys.tabsubpart$ tsp$
                WHERE    tcp$.obj# = tsp$.pobj#
                GROUP BY tcp$.bo#) tcp1$
        WHERE   t$.obj# = o$.obj# AND
                t$.obj# = tcp1$.bo# AND
                tcp1$.ts# = ts$.ts# AND
                BITAND(o$.flags, 128) != 128 AND       /* recycle bin object */
                BITAND(t$.property, 64+512+8192) = 0
      UNION ALL                                        /* Unpartitioned IOTs */
        SELECT  i$.dataobj#, o$.name, o$.owner#, NVL(t$.tab#, 0),
                NVL(t$.bobj#, 0), ts$.name, t$.spare1
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$, sys.ind$ i$
        WHERE   t$.obj# = o$.obj# AND
                t$.pctused$ = i$.obj# AND /*For IOTs, pctused has index obj# */
                i$.ts# = ts$.ts# AND
                BITAND(o$.flags, 128) != 128 AND       /* recycle bin object */
                BITAND(t$.property, 64+512+8192) = 64
      UNION ALL                                      /* 1st Partition of IOT */
        SELECT  t$.obj#, o$.name, o$.owner#, NVL(t$.tab#, 0), NVL(t$.bobj#, 0),
                ts$.name, t$.spare1
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$,
                (SELECT  bo#, 
                         MIN(ts#) KEEP (DENSE_RANK FIRST ORDER BY part#) ts#
                FROM     sys.indpart$
                GROUP BY bo#) ip1$
        WHERE   t$.obj# = o$.obj# AND
                t$.pctused$ = ip1$.bo# AND
                ip1$.ts# = ts$.ts# AND
                BITAND(o$.flags, 128) != 128 AND       /* recycle bin object */
                BITAND(t$.property, 64+512+8192) = 64
/
GRANT SELECT ON sys.exu81tts TO SELECT_CATALOG_ROLE;

REM Determine icache plsql mode
REM YES or NO, if not present, default to NO
REM
CREATE OR REPLACE VIEW exu8icplsql (
                value) AS
        SELECT  value$
        FROM    sys.props$
        WHERE   name = 'ICACHE_IMP_PLSQL'
/
GRANT READ ON sys.exu8icplsql TO PUBLIC;

REM
REM Enumerate tables in tablespace (for logical export of tablespaces)
REM Include tables that are either stored in the tablespace or have a partition
REM stored in the tablespace.  Ignore tables in SYS and cartridge schemas.
REM dobjid and tabno are not used for logical export.
REM Use sys.obj$ directly to make sure secondary objects are included.
REM
CREATE OR REPLACE VIEW exu9ltts (
                dobjid, name, ownerid, tabno, clusterflag, tsname)
      AS                                             /* Unpartitioned tables */
        SELECT  0, o$.name, o$.owner#, 0, NVL(t$.bobj#, 0), ts$.name
        FROM    sys.tab$ t$, sys.exu81obj o$, sys.ts$ ts$
        WHERE   t$.obj# = o$.obj# AND
                t$.ts# = ts$.ts# AND
                o$.owner# != 0 AND
                BITAND(t$.property, 32+64+512+8192) = 0 /* Not nested or IOT */
      UNION ALL                                         /* Simple Partitions */
        SELECT  0, o$.name, o$.owner#, 0, NVL(t$.bobj#, 0), ts$.name
        FROM    sys.tab$ t$, sys.obj$ o$, sys.tabpart$ tp$, sys.ts$ ts$
        WHERE   t$.obj# = o$.obj# AND
                t$.obj# = tp$.bo# AND
                tp$.ts# = ts$.ts# AND
                o$.owner# != 0 AND
                BITAND(t$.property, 32+64+512+8192) = 32
      UNION ALL                                      /* Composite partitions */
        SELECT  0, o$.name, o$.owner#, 0, NVL(t$.bobj#, 0), ts$.name
        FROM    sys.tab$ t$, sys.obj$ o$, sys.tabcompart$ tcp$,
                sys.tabsubpart$ tsp$, sys.ts$ ts$
        WHERE   t$.obj# = o$.obj# AND
                t$.obj# = tcp$.bo# AND
                tcp$.obj# = tsp$.pobj# AND
                tsp$.ts# = ts$.ts# AND
                o$.owner# != 0 AND
                BITAND(t$.property, 32+64+512+8192) = 32
      UNION ALL                                        /* Unpartitioned IOTs */
        SELECT  0, o$.name, o$.owner#, 0, NVL(t$.bobj#, 0), ts$.name
        FROM    sys.tab$ t$, sys.obj$ o$, sys.ts$ ts$, sys.ind$ i$
        WHERE   t$.obj# = o$.obj# AND
                t$.pctused$ = i$.obj# AND /* For IOTs, pctused has index obj#*/
                i$.ts# = ts$.ts# AND
                o$.owner# != 0 AND
                BITAND(t$.property, 32+64+512+8192) = 64
      UNION ALL                                      /* 1st Partition of IOT */
        SELECT  0, o$.name, o$.owner#, 0, NVL(t$.bobj#, 0), ts$.name
        FROM    sys.tab$ t$, sys.obj$ o$, sys.indpart$ ip$, sys.ts$ ts$
        WHERE   t$.obj# = o$.obj# AND
                t$.pctused$ = ip$.bo# AND
                ip$.ts# = ts$.ts# AND
                o$.owner# != 0 AND
                BITAND(t$.property, 32+64+512+8192) = 32+64
/
GRANT SELECT ON sys.exu9ltts TO SELECT_CATALOG_ROLE;

REM
REM Add support to get n-tier authentication information out of the database.
REM
CREATE OR REPLACE VIEW exu9nta (
                client, proxy, flags, role_clause, cred_type, cred_ver,
                cred_minor) AS
        SELECT  u$.name, up$.name, pd$.flags,
                DECODE(pd$.flags,
                       2, 'WITH NO ROLES',
                       4, 'WITH ROLE',
                       8, 'WITH ROLE ALL EXCEPT', ' '),
                DECODE(pd$.credential_type#,
                       1, 'AUTHENTICATED USING CERTIFICATE',
                       2, 'AUTHENTICATED USING DISTINGUISHED NAME',
                       3, 'AUTHENTICATED USING KERBEROS',
                       4, 'AUTHENTICATED USING PASSWORD', ' '),
                DECODE(pd$.credential_version#,
                       1, DECODE(pd$.credential_type#,
                                 1, 'TYPE ''X.509''',
                                 3, 'VERSION ''1.0''', ' '), ' '),
                DECODE(pd$.credential_minor#,
                       1, DECODE(pd$.credential_type#,
                                 1, 'VERSION ''3''', ' '), ' ')
        FROM    sys.user$ u$, sys.user$ up$, sys.proxy_data$ pd$
        WHERE   pd$.client# = u$.user# AND
                pd$.proxy# = up$.user#
/
GRANT SELECT ON sys.exu9nta TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu9ntarole (
                roleid, role, client, proxy) AS
        SELECT  prd$.role#, ur$.name, uc$.name, up$.name
        FROM    sys.user$ ur$, sys.proxy_role_data$ prd$,
                sys.user$ uc$, sys.user$ up$
        WHERE   prd$.role#   = ur$.user# AND
                prd$.client# = uc$.user# AND
                prd$.proxy#  = up$.user#
/
GRANT SELECT ON sys.exu9ntarole TO SELECT_CATALOG_ROLE;

REM
REM 10iR1 modifications for n-tier authentication
REM
CREATE OR REPLACE VIEW exu10nta (
                client, proxy, flags, role_clause, auth) AS
        SELECT  u$.name, up$.name, pd$.flags,
                DECODE(pd$.flags,
                       2, 'WITH NO ROLES',
                       4, 'WITH ROLE',
                       8, 'WITH ROLE ALL EXCEPT', ' '),
                DECODE(pd$.credential_type#,
                       5, 'AUTHENTICATION REQUIRED', ' ')
        FROM    sys.user$ u$, sys.user$ up$, sys.proxy_info$ pd$
        WHERE   pd$.client# = u$.user# AND
                pd$.proxy# = up$.user#
/
GRANT SELECT ON sys.exu10nta TO SELECT_CATALOG_ROLE;

CREATE OR REPLACE VIEW exu10ntarole (
                roleid, role, client, proxy) AS
        SELECT  prd$.role#, ur$.name, uc$.name, up$.name
        FROM    sys.user$ ur$, sys.proxy_role_info$ prd$,
                sys.user$ uc$, sys.user$ up$
        WHERE   prd$.role#   = ur$.user# AND
                prd$.client# = uc$.user# AND
                prd$.proxy#  = up$.user#
/
GRANT SELECT ON sys.exu10ntarole TO SELECT_CATALOG_ROLE;

REM
REM Create a view to get the default settings for the persistent switches.
REM
CREATE OR REPLACE VIEW exu9defpswitches (
                compflgs, nlslensem ) AS
        SELECT  a.value, b.value
        FROM    sys.v$parameter a, sys.v$parameter b
        WHERE   a.name = 'plsql_compiler_flags' AND
                b.name = 'nls_length_semantics'
/
GRANT READ ON sys.exu9defpswitches TO PUBLIC;

REM
REM Create a view to get the two persistent sql switches for a given objid
REM
CREATE OR REPLACE VIEW exu9objswitch (
                objid, compflgs, nlslensem ) AS
        SELECT  a.obj#, a.value, b.value
        FROM    sys.settings$ a, sys.settings$ b, sys.obj$ o
        WHERE   o.obj#  = a.obj# AND
                a.obj#  = b.obj# AND
                a.param = 'plsql_compiler_flags' AND
                b.param = 'nls_length_semantics' AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9objswitch TO PUBLIC;

REM
REM Create a view to get the default settings for the persistent switches.
REM 10i version for new plsql optimize level
REM
CREATE OR REPLACE VIEW exu10defpswitches (
                compflgs, nlslensem, optlevel ) AS
        SELECT  a.value, b.value, c.value
        FROM    sys.v$parameter a, sys.v$parameter b, sys.v$parameter c
        WHERE   a.name = 'plsql_compiler_flags' AND
                b.name = 'nls_length_semantics' AND
                c.name = 'plsql_optimize_level'
/
GRANT READ ON sys.exu10defpswitches TO PUBLIC;

REM
REM Create a view to get the two persistent sql switches for a given objid
REM 10i version for new plsql optimize level
REM
CREATE OR REPLACE VIEW exu10objswitch (
                objid, compflgs, nlslensem, optlevel ) AS
        SELECT  a.obj#, a.value, b.value, c.value
        FROM    sys.settings$ a, sys.settings$ b, sys.settings$ c, sys.obj$ o
        WHERE   o.obj#  = a.obj# AND
                a.obj#  = b.obj# AND
                b.obj#  = c.obj# AND
                a.param = 'plsql_compiler_flags' AND
                b.param = 'nls_length_semantics' AND
                c.param = 'plsql_optimize_level' AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu10objswitch TO PUBLIC;

REM
REM (These 2 views 'a' versions, exist because PLSQL_COMPILER_FLAGS was 
REM  changed twice during 10i.)
REM Create a view to get the default settings for the persistent switches.
REM 10ia version for new plsql code type
REM
CREATE OR REPLACE VIEW exu10adefpswitches (
                nlslensem, optlevel, codetype, warnings ) AS
        SELECT  a.value, b.value, c.value, d.value
        FROM    sys.v$parameter a, sys.v$parameter b, sys.v$parameter c,
                sys.v$parameter d
        WHERE   a.name = 'nls_length_semantics' AND
                b.name = 'plsql_optimize_level' AND
                c.name = 'plsql_code_type'      AND
                d.name = 'plsql_warnings'
/
GRANT READ ON sys.exu10adefpswitches TO PUBLIC;

REM
REM Create a view to get the five persistent sql switches for a given objid
REM 10ia version for new plsql code type & plsql debug
REM
CREATE OR REPLACE VIEW exu10aobjswitch (
                objid, nlslensem, optlevel, codetype, debug, warnings ) AS
        /* normal case - no overrides */
        SELECT  a.obj#, a.value, b.value, c.value, d.value, e.value 
        FROM    sys.settings$ a, sys.settings$ b, sys.settings$ c, 
                sys.settings$ d, sys.settings$ e, sys.obj$ o
        WHERE   o.obj#  = a.obj# AND
                a.obj#  = b.obj# AND
                b.obj#  = c.obj# AND
                c.obj#  = d.obj# AND
                d.obj#  = e.obj# AND
                a.param = 'nls_length_semantics'         AND
                b.param = 'plsql_optimize_level'         AND
                c.param = 'plsql_code_type'              AND
                d.param = 'plsql_debug'                  AND
                e.param = 'plsql_warnings'               AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE')) 
/
GRANT READ ON sys.exu10aobjswitch TO PUBLIC;

REM
REM Create a view to get the default settings for the persistent switches.
REM 10R2 version for new plsql_ccflags
REM
CREATE OR REPLACE VIEW exu10r2defpswitches (
                nlslensem, optlevel, codetype, warnings, ccflags ) AS
        SELECT  a.value, b.value, c.value, d.value, e.value
        FROM    sys.v$parameter a, sys.v$parameter b, sys.v$parameter c,
                sys.v$parameter d, sys.v$parameter e
        WHERE   a.name = 'nls_length_semantics' AND
                b.name = 'plsql_optimize_level' AND
                c.name = 'plsql_code_type'      AND
                d.name = 'plsql_warnings'       AND
                e.name = 'plsql_ccflags'
/
GRANT READ ON sys.exu10r2defpswitches TO PUBLIC;

REM
REM Create a view to get the six persistent sql switches for a given objid
REM 10R2 version for new plsql_ccflags
REM
CREATE OR REPLACE VIEW exu10r2objswitch (
                objid, nlslensem, optlevel, codetype, debug, warnings, 
                ccflags ) AS
        /* normal case - no overrides */
        SELECT  a.obj#, a.value, b.value, c.value, d.value, e.value , 
                f.value
        FROM    sys.settings$ a, sys.settings$ b, sys.settings$ c, 
                sys.settings$ d, sys.settings$ e, sys.settings$ f,
                sys.obj$ o
        WHERE   o.obj#  = a.obj# AND
                a.obj#  = b.obj# AND
                b.obj#  = c.obj# AND
                c.obj#  = d.obj# AND
                d.obj#  = e.obj# AND
                e.obj#  = f.obj# AND
                a.param = 'nls_length_semantics'         AND
                b.param = 'plsql_optimize_level'         AND
                c.param = 'plsql_code_type'              AND
                d.param = 'plsql_debug'                  AND
                e.param = 'plsql_warnings'               AND
                f.param = 'plsql_ccflags'                AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE')) 
/
GRANT READ ON sys.exu10r2objswitch TO PUBLIC;
REM

REM
REM Add support for FGA
REM
REM Get fine grained auditing policies
REM
CREATE OR REPLACE VIEW exu9fga (
                objown, objnam, policy, poltxt, polcol, polown, polpkg, polfun,
                enabled) AS
        SELECT  u.name, o.name, f.pname,
                replace(f.ptxt,'''',''''''),
                f.pcol, f.pfschma, f.ppname,
                f.pfname, f.enable_flag
        FROM    sys.user$ u, sys.obj$ o, sys.fga$ f
        WHERE   u.user# = o.owner# AND
                f.obj# = o.obj# AND
                (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9fga TO PUBLIC;


REM
REM Substitutable and 'is type of' inheritance constraints
REM
CREATE OR REPLACE VIEW exu9inhcolcons
        (tobjid, intcolid, cname, typeflags, subtypeflags,
         typeownerid, typeowner, typename)
    AS SELECT
        ct$.obj#, ct$.intcol#,
        DECODE(BITAND(c$.property,1), 0, '"'||c$.name||'"', 1, ac$.name),
        ct$.flags, NVL(sc$.flags,0),
        NVL(so$.owner#,0), NVL(su$.name,' '), NVL(so$.name,' ')
    FROM
        sys.coltype$ ct$, sys.col$ c$, sys.attrcol$ ac$, sys.subcoltype$ sc$,
        sys.obj$ so$, sys.user$ su$, sys.obj$ to$
    WHERE
        bitand (ct$.flags, (512+1024+2048+4096)) != 0 AND
        ct$.obj# = c$.obj# AND
        ct$.intcol# = c$.intcol# AND
        ct$.obj# = ac$.obj# (+) AND
        ct$.intcol# = ac$.intcol# (+) AND
        ct$.obj# = sc$.obj# (+) AND
        ct$.intcol# = sc$.intcol# (+) AND
        bitand(NVL(sc$.flags,1),1+2) != 0 AND
        sc$.toid = so$.oid$ (+) AND
        so$.owner# = su$.user# (+) AND
        ct$.obj# = to$.obj# AND
        (userenv('SCHEMAID') = 0 OR (userenv('SCHEMAID') = to$.owner#) OR
         EXISTS(SELECT * FROM sys.session_roles WHERE role='SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9inhcolcons TO PUBLIC;



REM
REM get eXternal TaBle data
REM
CREATE OR REPLACE VIEW exu9xtb (
                objid, default_dir, type, nr_locations, reject_limit, par_type,
                param_clob, position, directory, name) AS
        SELECT  et$.obj#, et$.default_dir, et$.type$, et$.nr_locations,
                et$.reject_limit, et$.par_type, et$.param_clob,
                el$.position, el$.dir, el$.name
        FROM    sys.external_location$ el$, sys.external_tab$ et$, sys.obj$ o$
        WHERE   el$.obj# = et$.obj# AND
                el$.obj# = o$.obj#  AND
                (userenv('SCHEMAID') IN (o$.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exu9xtb TO PUBLIC;

REM
REM Export view to Get Sort Area Size.
REM
CREATE OR REPLACE VIEW exu9gsas (
                value) AS
        SELECT  value
        FROM    sys.v$parameter
        WHERE   name = 'sort_area_size'
/
GRANT READ ON sys.exu9gsas TO PUBLIC;

REM
REM NOT NULL column constraints - only used for object tables
REM
CREATE OR REPLACE VIEW exu9otnnull (tobjid, name, conname, defer) AS
  SELECT  tobjid, name, conname, defer
  FROM    sys.exu8col_temp
  WHERE   isnull = 1 AND
          BITAND(colprop, 32) != 32       /* Not hidden (exploded col/attrs) */
/
GRANT READ ON sys.exu9otnnull  TO PUBLIC;

REM
REM View to see if a table is compressed (new for 10i).
REM
CREATE OR REPLACE VIEW sys.expcompressedtab
    (SPARE1, TOBJ$) AS
        SELECT s.spare1, t.obj# 
        FROM   sys.tab$ t, sys.seg$ s
        WHERE  t.ts#    = s.ts#
        AND    t.file#  = s.file#
        AND    t.block# = s.block#
        AND    s.type#  = 5
        AND    (bitand(s.spare1,4096) = 4096 OR bitand(s.spare1,2048) = 2048)
/
GRANT READ ON sys.expcompressedtab TO PUBLIC;

REM
REM View to see if a partition is compressed (new for 10i).
REM
CREATE OR REPLACE VIEW sys.expcompressedpart
    (SPARE1, TOBJ$) AS
        SELECT s.spare1, t.obj# 
        FROM   sys.tabpart$ t, sys.seg$ s
        WHERE  t.ts#    = s.ts#
        AND    t.file#  = s.file#
        AND    t.block# = s.block#
        AND    s.type#  = 5
        AND    (bitand(s.spare1,4096) = 4096 OR bitand(s.spare1,2048) = 2048)
/
GRANT READ ON sys.expcompressedpart TO PUBLIC;

REM
REM View to see if a subpartition is compressed (new for 10i).
REM
CREATE OR REPLACE VIEW sys.expcompressedsub
    (SPARE1, TOBJ$) AS
        SELECT s.spare1, t.obj# 
        FROM   sys.tabsubpart$ t, sys.seg$ s
        WHERE  t.ts#    = s.ts#
        AND    t.file#  = s.file#
        AND    t.block# = s.block#
        AND    s.type#  = 5
        AND    (bitand(s.spare1,4096) = 4096 OR bitand(s.spare1,2048) = 2048)
/
GRANT READ ON sys.expcompressedsub TO PUBLIC;

REM 
REM View to see if USER has EXEMPT ACCESS POLICY privilege.
REM
CREATE OR REPLACE VIEW sys.expexempt
    (COUNT) AS
        SELECT  COUNT(*) 
        FROM    sys.sysauth$
        WHERE   (privilege# = 
                        (SELECT privilege
                         FROM   sys.system_privilege_map
                         WHERE  name = 'EXEMPT ACCESS POLICY'))
        AND     grantee# = userenv('SCHEMAID')   /* user directly has priv */
        OR      (grantee# = userenv('SCHEMAID')   /* user has role with priv */
                        AND privilege# > 0  
                        AND privilege# IN 
                                (SELECT u1.privilege# 
                                 FROM sys.sysauth$ u1, sys.sysauth$ u2 
                                 WHERE u1.grantee# = userenv('SCHEMAID')
                                 AND u1.privilege# = u2.grantee# 
                                 AND u2.privilege# = 
                                      (SELECT privilege
                                       FROM   sys.system_privilege_map
                                       WHERE  name = 'EXEMPT ACCESS POLICY')))
/
GRANT READ ON sys.expexempt TO PUBLIC;

REM
REM The following four views are used to determine if a partitions's subpartition
REM were created using the table's partition template.  They are referenced by a 
REM PL/SQL function in prvtpexp.

CREATE OR REPLACE VIEW sys.exptabsubpart AS
        SELECT 
              tsp.obj#                                                 OBJNO, 
              tsp.pobj#                                                POBJNO,
              row_number() OVER 
                   (partition by tsp.pobj# order by tsp.subpart#) - 1  SUBPARTNO,
              bhiboundval                                              BHIBOUNDVAL, 
              ts#                                                      TSNO
        FROM sys.tabsubpart$ tsp
/
GRANT READ ON sys.exptabsubpart TO PUBLIC;

CREATE OR REPLACE VIEW sys.exptabsubpartdata_view AS
        SELECT 
              sp.bhiboundval       SPBND, 
              dsp.bhiboundval      DSPBND, 
              p.obj#               PONO, 
              sp.tsno              SPTS,
              dsp.ts#              DSPTS, 
              p.defts#             PDEFTS, 
              tpo.defts#           TDEFTS, 
              u.datats#            UDEFTS
        FROM sys.tabcompart$ p, sys.partobj$ tpo, sys.exptabsubpart sp,
             sys.defsubpart$ dsp, sys.obj$ po, sys.obj$ spo, sys.user$ u
        WHERE
             p.bo# = tpo.obj# AND
             p.subpartcnt = MOD(TRUNC(tpo.spare2/65536), 65536) AND
             sp.pobjno = p.obj# AND
             po.obj# = p.obj# AND
             spo.obj# = sp.objno AND
             sp.subpartno = dsp.spart_position AND
             dsp.bo# = p.bo# AND
             u.user# = po.owner# and
             (spo.subname = (po.subname || '_' || dsp.spart_name) OR
                            (po.subname LIKE 'SYS_P%' AND 
                             spo.subname LIKE 'SYS_SUBP%'))
/

GRANT READ ON sys.exptabsubpartdata_view TO PUBLIC;

REM
REM We need to see if a subpartition has lob fragments 
REM

CREATE OR REPLACE VIEW exptabsubpartlobfrag AS
        SELECT 
              lf.parentobj#                                         PARENTOBJNO, 
              lf.ts#                                                TSNO, 
              lf.fragobj#                                           FRAGOBJNO, 
              row_number() OVER 
                 (partition by lf.parentobj# order by lf.frag#) - 1 FRAGNO,
              lf.tabfragobj#                                        TABFRAGOBJNO
        FROM sys.lobfrag$ lf
/
GRANT READ ON sys.exptabsubpartlobfrag TO PUBLIC;

CREATE OR REPLACE VIEW sys.exptabsubpartlob_view AS
        SELECT 
              tp.obj#            PONO,
              lp.defts#          LPDEFTS, 
              lf.tsno            LFTS, 
              lb.defts#          LCDEFTS,
              dsp.lob_spart_ts#  LSPDEFTS, 
              tsp.ts#            SPTS
        FROM  sys.tabcompart$ tp, sys.lobcomppart$ lp, sys.partlob$ lb, 
              sys.exptabsubpartlobfrag lf, sys.defsubpartlob$ dsp, 
              sys.obj$ lspo, sys.obj$ tpo, sys.tabsubpart$ tsp
        WHERE 
              lp.tabpartobj# = tp.obj# AND
              lp.lobj# = lb.lobj# and
              lf.parentobjno = lp.partobj# AND
              dsp.bo# = tp.bo# and
              dsp.intcol# = lb.intcol# AND
              lspo.obj# = lf.fragobjno AND
              tpo.obj# = tp.obj# AND
              (lspo.subname = tpo.subname || '_' || dsp.lob_spart_name OR
               (tpo.subname LIKE 'SYS_P%' AND lspo.subname LIKE 'SYS_LOB_SUBP%')) AND
              dsp.spart_position = lf.fragno AND 
              tsp.obj# = lf.tabfragobjno
     UNION ALL
        SELECT tp.obj#           PONO, 
               lp.defts#         LPDEFTS, 
               lf.tsno           LFTS, 
               lb.defts#         LCDEFTS,
                                 NULL, 
               tsp.ts#           SPTS
        FROM sys.tabcompart$ tp, sys.lobcomppart$ lp, sys.partlob$ lb, 
             sys.exptabsubpartlobfrag lf, sys.obj$ lspo, sys.obj$ tpo, 
             sys.tabsubpart$ tsp
        WHERE lp.tabpartobj# = tp.obj# AND
              lp.lobj# = lb.lobj# AND
              lf.parentobjno = lp.partobj# AND
              lb.intcol# NOT IN 
                (SELECT distinct dsp.intcol#
                  FROM sys.defsubpartlob$ dsp 
                  WHERE dsp.bo# = tp.bo#) AND
              lspo.obj# = lf.fragobjno AND
              tpo.obj# = tp.obj# AND
              lspo.subname LIKE 'SYS_LOB_SUBP%' AND
              tsp.obj# = lf.tabfragobjno;
/
GRANT READ ON sys.exptabsubpartlob_view TO PUBLIC;

CREATE OR REPLACE VIEW sys.expgetenccolnam AS
        SELECT c.name, c.obj# 
        FROM   sys.col$ c, sys.obj$ o
        WHERE  bitand(c.property,67108864) = 67108864 AND /* encrypted column */
               c.obj#  = o.obj#                       AND
               (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.expgetenccolnam TO PUBLIC;

REM
REM View to get MAPPING table info for a NON-partitioned IOT (new for 10.2.2).
REM New for 10.2
REM
CREATE OR REPLACE VIEW sys.expmapiot
          (obj, dobj, ts, fileno, block, initextnt, 
           freelists, 
           groups, 
           pool, 
           tsname, logging, 
           pctfree$, 
           pctused$, 
           initrans, maxtrans ) AS
        SELECT t.obj#, t.dataobj#, t.ts#, t.file#, t.block#, s.iniexts, 
               NVL(s.lists,0),
               NVL(s.groups,0),
               DECODE(bitand(s.cachehint, 3), 1, 'KEEP', 2, 'RECYCLE', 'DEFAULT'),
               ts.name, ts.dflogging, 
               MOD(t.pctfree$, 100), 
               t.pctused$, 
               t.initrans, t.maxtrans
        FROM   sys.tab$ t, sys.seg$ s, sys.ts$ ts, sys.obj$ o
        WHERE  t.ts#    = s.ts#
        AND    t.file#  = s.file#
        AND    t.block# = s.block#
        AND    s.type#  = 5
        AND    ts.ts#   = t.ts#
        AND    t.obj#   = o.obj#
        AND    (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.expmapiot TO PUBLIC;

REM
REM View to get the obj# of the mapping table of a Partitioned IOT.
REM New for 10.2
REM
CREATE OR REPLACE VIEW sys.expgetmapobj
          (mapobj, iotobj) AS
        SELECT  t.pctfree$, t.obj# 
        FROM    sys.tab$ t, sys.obj$ o
        WHERE   t.obj# = o.obj#
        AND     (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.expgetmapobj TO PUBLIC;

REM
REM View to get MAPPING table info for a partitioned IOT (new for 10.2.2).
REM
CREATE OR REPLACE VIEW sys.exppiotmap
          (obj, dobj, ts, fileno, block, 
           initextnt, 
           freelists, groups, 
           pool, 
           bo, partno, tsname, logging, 
           pctfree$, 
           pctused$, initrans, maxtrans,
           blocksize)  AS
        SELECT t.obj#, t.dataobj#, t.ts#, t.file#, t.block#, 
               NVL(po.deftiniexts, 0),
               po.deflists, po.defgroups,
               DECODE(bitand(po.spare1, 3), 1, 'KEEP', 2, 'RECYCLE', 'DEFAULT'), 
               t.bo#, t.part#, ts.name, po.deflogging, 
               MOD(po.defpctfree, 100), 
               po.defpctused, t.initrans, t.maxtrans, 
               NVL(ts.blocksize, 2048)   /* non null for table/indexes */
        FROM   sys.tabpart$ t, sys.partobj$ po, sys.ts$ ts, sys.obj$ o
        WHERE  ts.ts#   = t.ts#
        AND    t.bo#    = po.obj#
        AND    t.bo#    = o.obj#
        AND    (userenv('SCHEMAID') IN (o.owner#, 0) OR
                 EXISTS (
                    SELECT  role
                    FROM    sys.session_roles
                    WHERE   role = 'SELECT_CATALOG_ROLE'))
/
GRANT READ ON sys.exppiotmap TO PUBLIC;

Rem
Rem View to get XSL delimiter string (new for 11).
Rem
CREATE OR REPLACE VIEW sys.expxsldelim
          ( xsldelimiter ) AS
        SELECT SUBSTR(DEFAULT_VAL,2,4)  
        FROM SYS.METAXSLPARAM$ 
        WHERE MODEL = 'ORACLE' AND TRANSFORM = 'PARSE' AND PARAM = 'PRS_DELIM'
/
GRANT READ ON sys.expxsldelim TO PUBLIC;
/

REM
REM Add versioning support for export. This will get bumped up as the views
REM evolve. The insert is needed for upgrades from 7.0 or new databases. The
REM update is needed for databases that have older compatibility. These are
REM the releases when the compatibility was bumped:
REM
REM    7.0.* - no compatibility - assume zero
REM    7.1.3 - set to one
REM    7.2.1 - set to two
REM    7.2.3 - set to three
REM    8.0.1 - set to four
REM    8.0.2 - set to five
REM    8.0.3 - set to six
REM    8.0.4 - set to seven
REM    8.1.6 - set to eight
REM
INSERT INTO props$
        SELECT  'EXPORT_VIEWS_VERSION', '8', 'Export views revision #'
        FROM    sys.dual
        WHERE   NOT EXISTS (
                    SELECT  'x'
                    FROM    sys.props$
                    WHERE   name = 'EXPORT_VIEWS_VERSION')
/
UPDATE props$ SET value$ = 8 WHERE name = 'EXPORT_VIEWS_VERSION'
/
COMMIT
/

REM
REM Exclude the system.help table from export
REM but avoid duplicates upon multiple runs of catexp.sql
REM
insert into noexp$
    select 'SYSTEM', 'HELP', 2 from sys.dual
    where not exists (
       select 'x'
       from   sys.noexp$
       where name  = 'HELP' AND
                 owner = 'SYSTEM' )
/
COMMIT
/

REM
REM revoke inc tables grants from system as incremental export is
REM obsolete feature
REM

revoke all on incexp from system
/
revoke all on incvid from system
/
revoke all on incfil from system
/

@?/rdbms/admin/sqlsessend.sql

OHA YOOOO