MINI MINI MANI MO
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