[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/oracle/archives/ -> patch_rebuild_dupfunc.sql (source)

   1  /*$mw$*/
   2  CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname   IN VARCHAR2,
   3                                              p_oldprefix IN VARCHAR2,
   4                                              p_newprefix IN VARCHAR2,
   5                                              p_temporary IN BOOLEAN) IS
   6    e_table_not_exist EXCEPTION;
   7    PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942);
   8    l_temp_ei_sql VARCHAR2(2000);
   9    l_temporary   BOOLEAN := p_temporary;
  10  BEGIN
  11    BEGIN
  12      EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname ||
  13                        ' CASCADE CONSTRAINTS PURGE';
  14    EXCEPTION
  15      WHEN e_table_not_exist THEN
  16        NULL;
  17    END;
  18    IF (p_tabname = 'SEARCHINDEX') THEN
  19      l_temporary := FALSE;
  20    END IF;
  21    IF (l_temporary) THEN
  22      EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix ||
  23                        p_tabname ||
  24                        ' ON COMMIT PRESERVE ROWS AS SELECT * FROM ' ||
  25                        p_oldprefix || p_tabname || ' WHERE ROWNUM = 0';
  26    ELSE
  27      EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname ||
  28                        ' AS SELECT * FROM ' || p_oldprefix || p_tabname ||
  29                        ' WHERE ROWNUM = 0';
  30    END IF;
  31    FOR rc IN (SELECT column_name, data_default
  32                 FROM user_tab_columns
  33                WHERE table_name = p_oldprefix || p_tabname
  34                  AND data_default IS NOT NULL) LOOP
  35      EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname ||
  36                        ' MODIFY ' || rc.column_name || ' DEFAULT ' ||
  37                        SUBSTR(rc.data_default, 1, 2000);
  38    END LOOP;
  39    FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT',
  40                                                                            constraint_name),
  41                                                      32767,
  42                                                      1),
  43                                      USER || '"."' || p_oldprefix,
  44                                      USER || '"."' || p_newprefix),
  45                              '"' || constraint_name || '"',
  46                              '"' || p_newprefix || constraint_name || '"') DDLVC2,
  47                      constraint_name
  48                 FROM user_constraints uc
  49                WHERE table_name = p_oldprefix || p_tabname
  50                  AND constraint_type = 'P') LOOP
  51      l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
  52      l_temp_ei_sql := SUBSTR(l_temp_ei_sql,
  53                              1,
  54                              INSTR(l_temp_ei_sql,
  55                                    ')',
  56                                    INSTR(l_temp_ei_sql, 'PRIMARY KEY') + 1) + 1);
  57      IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
  58        EXECUTE IMMEDIATE l_temp_ei_sql;
  59      END IF;
  60    END LOOP;
  61    IF (NOT l_temporary) THEN
  62      FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT',
  63                                                                      constraint_name),
  64                                                32767,
  65                                                1),
  66                                USER || '"."' || p_oldprefix,
  67                                USER || '"."' || p_newprefix) DDLVC2,
  68                        constraint_name
  69                   FROM user_constraints uc
  70                  WHERE table_name = p_oldprefix || p_tabname
  71                    AND constraint_type = 'R') LOOP
  72        IF nvl(length(l_temp_ei_sql), 0) > 0 AND
  73           INSTR(l_temp_ei_sql, 'PRIMARY KEY') = 0 THEN
  74          EXECUTE IMMEDIATE l_temp_ei_sql;
  75        END IF;
  76      END LOOP;
  77    END IF;
  78    FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
  79                                                                            index_name),
  80                                                      32767,
  81                                                      1),
  82                                      USER || '"."' || p_oldprefix,
  83                                      USER || '"."' || p_newprefix),
  84                              '"' || index_name || '"',
  85                              '"' || p_newprefix || index_name || '"') DDLVC2,
  86                      index_name,
  87                      index_type
  88                 FROM user_indexes ui
  89                WHERE table_name = p_oldprefix || p_tabname
  90                  AND index_type NOT IN ('LOB', 'DOMAIN')
  91                  AND NOT EXISTS
  92                (SELECT NULL
  93                         FROM user_constraints
  94                        WHERE table_name = ui.table_name
  95                          AND constraint_name = ui.index_name)) LOOP
  96      l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
  97      l_temp_ei_sql := SUBSTR(l_temp_ei_sql,
  98                              1,
  99                              INSTR(l_temp_ei_sql,
 100                                    ')',
 101                                    INSTR(l_temp_ei_sql,
 102                                          '"' || USER || '"."' || p_newprefix || '"') + 1) + 1);
 103      IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
 104        EXECUTE IMMEDIATE l_temp_ei_sql;
 105      END IF;
 106    END LOOP;
 107    FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
 108                                                                            index_name),
 109                                                      32767,
 110                                                      1),
 111                                      USER || '"."' || p_oldprefix,
 112                                      USER || '"."' || p_newprefix),
 113                              '"' || index_name || '"',
 114                              '"' || p_newprefix || index_name || '"') DDLVC2,
 115                      index_name,
 116                      index_type
 117                 FROM user_indexes ui
 118                WHERE table_name = p_oldprefix || p_tabname
 119                  AND index_type = 'DOMAIN'
 120                  AND NOT EXISTS
 121                (SELECT NULL
 122                         FROM user_constraints
 123                        WHERE table_name = ui.table_name
 124                          AND constraint_name = ui.index_name)) LOOP
 125      l_temp_ei_sql := rc.ddlvc2;
 126      IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
 127        EXECUTE IMMEDIATE l_temp_ei_sql;
 128      END IF;
 129    END LOOP;
 130    FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER',
 131                                                                                  trigger_name),
 132                                                            32767,
 133                                                            1)),
 134                                      USER || '"."' || p_oldprefix,
 135                                      USER || '"."' || p_newprefix),
 136                              ' ON ' || p_oldprefix || p_tabname,
 137                              ' ON ' || p_newprefix || p_tabname) DDLVC2,
 138                      trigger_name
 139                 FROM user_triggers
 140                WHERE table_name = p_oldprefix || p_tabname) LOOP
 141      l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1);
 142      IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
 143        EXECUTE IMMEDIATE l_temp_ei_sql;
 144      END IF;
 145    END LOOP;
 146  END;
 147  
 148  /*$mw$*/
 149  


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1