MINI MINI MANI MO

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

Rem
Rem $Header: sdo/admin/semvmrecreate.sql /main/7 2017/07/05 11:00:13 rjanders Exp $
Rem
Rem semvmrecreate.sql
Rem
Rem Copyright (c) 2009, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      semvmrecreate.sql - <one-line expansion of the name>
Rem
Rem    DESCRIPTION
Rem      <short description of component this file declares/defines>
Rem
Rem    NOTES
Rem      <other useful comments, qualifications, etc.>
Rem
Rem    BEGIN SQL_FILE_METADATA
Rem    SQL_SOURCE_FILE: sdo/admin/semvmrecreate.sql
Rem    SQL_SHIPPED_FILE: md/admin/semvmrecreate.sql
Rem    SQL_PHASE: UPGRADE
Rem    SQL_STARTUP_MODE: NORMAL
Rem    SQL_IGNORABLE_ERRORS: NONE
Rem    SQL_CALLING_FILE: NONE
Rem    END SQL_FILE_METADATA
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    rjanders    04/27/17 - Correct "SQL_PHASE" metadata values
Rem    sravada     01/11/17 - bug 25370681
Rem    rjanders    01/02/15 - long identifier project phase 1
Rem    rjanders    03/15/13 - #16473696: Start/End _ORACLE_SCRIPT
Rem                           initialization
Rem    matperry    03/28/12 - bug 13893955
Rem    matperry    05/27/09 - Created
Rem

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

----------------------------------------------------------------------------
-- This script consults metadata tables for virtual models and creates    --
-- a script that can be used to recreate all the virtual models in        --
-- the semantic network. The name of the generated script is given as     --
-- a command line argument, for example:                                  --
-- @semvmrecreate.sql my_recreate_script.sql                              --
----------------------------------------------------------------------------

create table MDSYS.semvm_recreate$ (stmt varchar2(4000), stmtId number);

declare
  vmOwner    varchar2(128);
  vmName     varchar2(128);
  type       cursor_type is REF CURSOR;
  outer_crs  cursor_type;
  query_crs  cursor_type;
  stmt       varchar2(2000);
  modelName  varchar2(128);
  modelsStr  varchar2(4000);
  rbName     varchar2(128);
  rbsStr     varchar2(4000);
  priv_crs   cursor_type;
  privStmt   varchar2(2000);
  privStr    varchar2(4000);
  viewName1  varchar2(128);
  viewName2  varchar2(128);
  grantee    varchar2(128);
  privilege  varchar2(40);
  grantable  varchar2(3);
  firstRow   boolean;
  stmtCtr    number := 0;
  user_id    number;
  grantStmt  varchar2(4000);

  v_vmName    varchar2(128);
  v_vmOwner   varchar2(130);
  v_modelName varchar2(130);

  v_rbName    varchar2(130);
begin

  open outer_crs for 'select owner, virtual_model_name from mdsys.sem_vmodel_info
                      order by virtual_model_name';
  loop
  begin
    fetch outer_crs into vmOwner, vmName;
    exit when outer_crs%NOTFOUND;

    v_vmName  := SYS.DBMS_ASSERT.simple_sql_name(vmName);
    v_vmOwner := SYS.DBMS_ASSERT.qualified_sql_name(vmOwner);

    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using 'alter session set current_schema=' || v_vmOwner || ';',
            stmtCtr;
      stmtCtr := stmtCtr + 1;

    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using 'begin',
            stmtCtr;
      stmtCtr := stmtCtr + 1;

    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using 'sem_apis.create_virtual_model(' || SYS.DBMS_ASSERT.enquote_literal(v_vmName) || ', ',
            stmtCtr;
      stmtCtr := stmtCtr + 1;

    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using '   sem_models(',
            stmtCtr;
      stmtCtr := stmtCtr + 1;

    -- build the models string --
    firstRow := true;

    stmt := 'select data_name 
             from mdsys.sem_vmodel_datasets
             where virtual_model_name = ' || 
             SYS.DBMS_ASSERT.enquote_literal(v_vmName) || '
             and data_type = ''MODEL''';

    open query_crs for stmt;
    loop 
    begin
      fetch query_crs into  modelName;
      exit when query_crs%NOTFOUND;

      v_modelName := SYS.DBMS_ASSERT.enquote_literal(SYS.DBMS_ASSERT.simple_sql_name(modelName));

      if (firstRow) then
        execute immediate '
          insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
          using '   '   || v_modelName,
                stmtCtr;
          stmtCtr := stmtCtr + 1;   
        firstRow := false;
      else
        execute immediate '
          insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
          using ',  '   || v_modelName,
                stmtCtr;
          stmtCtr := stmtCtr + 1;   
      end if;
    end;
    end loop;
    close query_crs;

    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using '   ),',
            stmtCtr;
      stmtCtr := stmtCtr + 1;

    -- build the rulebases string --
    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using '   sem_rulebases(',
            stmtCtr;
      stmtCtr := stmtCtr + 1;

    firstRow := true;

    stmt := 'select data_name 
             from mdsys.sem_vmodel_datasets
             where virtual_model_name = ' || 
             SYS.DBMS_ASSERT.enquote_literal(v_vmName) || '
             and data_type = ''RULEBASE''';

    open query_crs for stmt;
    loop 
    begin
      fetch query_crs into  rbName;
      exit when query_crs%NOTFOUND;

      v_rbName := SYS.DBMS_ASSERT.enquote_literal(SYS.DBMS_ASSERT.simple_sql_name(rbName));

      if (firstRow) then
        execute immediate '
          insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
          using '   ' || v_rbName,
                stmtCtr;
          stmtCtr := stmtCtr + 1;
        firstRow := false;
      else
        execute immediate '
          insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
          using ',  ' || v_rbName,
                stmtCtr;
          stmtCtr := stmtCtr + 1;
      end if;
    end;
    end loop;
    close query_crs;

    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using '   ));',
            stmtCtr;
      stmtCtr := stmtCtr + 1;            

    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using 'end;',
            stmtCtr;
      stmtCtr := stmtCtr + 1;

    execute immediate '
      insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
      using '/',
            stmtCtr;
      stmtCtr := stmtCtr + 1;            

    -- handle privileges --
    -- semv view --
    privStmt := 'select p.grantee, p.privilege, p.grantable, u.user_id
                 from sys.dba_tab_privs p, sys.all_users u
                 where p.owner = ''MDSYS'' and 
                       p.table_name = '|| SYS.DBMS_ASSERT.enquote_literal(
                                            'SEMV_' || v_vmName) ||
                       ' and p.grantee <> ''SYS''
                       and p.grantor = u.username';

    open priv_crs for privStmt;
    loop
    begin
      fetch priv_crs into grantee, privilege, grantable, user_id;
      exit when priv_crs%NOTFOUND;
      
      if (grantable = 'YES') then
        grantStmt := 'grant '||privilege||' on "MDSYS".' || 
          SYS.DBMS_ASSERT.enquote_name('SEMV_'|| v_vmName) ||' to '||
          SYS.DBMS_ASSERT.enquote_name(grantee, false)||' with grant option';
      else
        grantStmt := 'grant '||privilege||' on "MDSYS".' || 
          SYS.DBMS_ASSERT.enquote_name('SEMV_'|| v_vmName) ||' to '||
          SYS.DBMS_ASSERT.enquote_name(grantee, false);
      end if; 

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using 'declare', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  dumV number;', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  curnum number;', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using 'begin', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  curnum := dbms_sql.open_cursor();', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  sys.dbms_sys_sql.parse_as_user(curnum, '||
              SYS.DBMS_ASSERT.enquote_literal(grantStmt)||
              ', dbms_sql.native, '||user_id||');', 
              stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  dumv := dbms_sql.execute(curnum);', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  dbms_sql.close_cursor(curnum);', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using 'end;', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '/', stmtCtr;
      stmtCtr := stmtCtr + 1;

    end; 
    end loop;
    close priv_crs;

    -- semu view --
    privStmt := 'select p.grantee, p.privilege, p.grantable, u.user_id
                 from sys.dba_tab_privs p, sys.all_users u
                 where p.owner = ''MDSYS'' and 
                       p.table_name = '||
                       SYS.DBMS_ASSERT.enquote_literal('SEMU_' || v_vmName) ||
                       ' and p.grantee <> ''SYS''
                       and p.grantor = u.username';

    open priv_crs for privStmt;
    loop
    begin
      fetch priv_crs into grantee, privilege, grantable, user_id;
      exit when priv_crs%NOTFOUND;
      
      if (grantable = 'YES') then
        grantStmt := 'grant '||privilege||' on "MDSYS".'|| 
          SYS.DBMS_ASSERT.enquote_name('SEMU_'||v_vmName)||' to '||
          SYS.DBMS_ASSERT.enquote_name(grantee, false)||' with grant option';
      else
        grantStmt := 'grant '||privilege||' on "MDSYS".'|| 
          SYS.DBMS_ASSERT.enquote_name('SEMU_'||v_vmName)||' to '||
          SYS.DBMS_ASSERT.enquote_name(grantee, false);
      end if; 

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using 'declare', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  dumV number;', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  curnum number;', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using 'begin', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  curnum := dbms_sql.open_cursor();', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  sys.dbms_sys_sql.parse_as_user(curnum, '||
              SYS.DBMS_ASSERT.enquote_literal(grantStmt)||
              ', dbms_sql.native, '||user_id||');', 
              stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  dumv := dbms_sql.execute(curnum);', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '  dbms_sql.close_cursor(curnum);', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using 'end;', stmtCtr;
      stmtCtr := stmtCtr + 1;

      execute immediate '
        insert into mdsys.semvm_recreate$(stmt, stmtId) values (:1, :2)'
        using '/', stmtCtr;
      stmtCtr := stmtCtr + 1;

    end; 
    end loop;
    close priv_crs;

  end;
  end loop;
  close outer_crs;
  
end;
/
show errors;

COMMIT;

SET LINESIZE 160;
SET PAGESIZE 20000;
SET ECHO OFF;
SET SERVEROUT OFF;
SET FEEDBACK OFF;
SET HEADING OFF;

SPOOL &1;

SELECT stmt
FROM MDSYS.SEMVM_RECREATE$
ORDER BY stmtId;

SPOOL OFF;

SET FEEDBACK ON;
SET HEADING ON;

DROP TABLE MDSYS.SEMVM_RECREATE$;

COMMIT;

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


OHA YOOOO