DBA Data[Home] [Help]

PACKAGE BODY: XDB.XIMETADATA_PKG

Source


1 PACKAGE BODY     ximetadata_pkg AS
2 
3 iterate   NUMBER := 0;     -- counts the calls
4 data      CLOB := NULL;    -- buffer storage
5 offset NUMBER := 1;
6 done NUMBER := 0;
7 
8 FUNCTION getIndexMetadata (idxinfo  IN  sys.ODCIIndexInfo,
9                            expver   IN  VARCHAR2,
10                            newblock OUT number,
11                            idxenv   IN  sys.ODCIEnv) return VARCHAR2 IS
12   current_plsql VARCHAR2(32000);
13   pos    NUMBER := 0;
14 BEGIN
15   newblock := 0;
16 
17   IF (done = 1) THEN
18      iterate  := 0; -- reset
19      done     := 0; -- reset
20      offset   := 1;
21      RETURN '';
22   END IF;
23 
24   IF (sys.dbms_datapump.datapump_job) THEN
25     IF (iterate = 0) THEN -- first call: get data from c callback once
26       data := getIndexMetadataCallback (idxinfo, expver, newblock, idxenv);
27       IF (length(data) <= 30000) THEN
28         done := 1;          -- short metadata can be returned in one shot
29         RETURN data;
30       END IF;
31     END IF;
32 
33     -- we have long metadata
34     -- find the second occurence of 'insert into XDB.XDB'
35     pos := dbms_lob.instr(data, 'insert into', offset, 2);
36 
37     IF (pos = 0) THEN -- not found
38        current_plsql := DBMS_LOB.SUBSTR(data, 30000, offset); -- the rest
39        done := 1;
40     ELSE
41        current_plsql:= DBMS_LOB.SUBSTR(data, pos - offset -1, offset);
42        offset := pos;
43     END IF;
44 
45     iterate := iterate + 1;
46     return current_plsql;
47   END IF;
48 
49   done := 1;
50   return '';
51 END getIndexMetadata;
52 
53 
54  function getIndexMetadataCallback (idxinfo  IN  sys.ODCIIndexInfo,
55                                     expver   IN  VARCHAR2,
56                                     newblock OUT number,
57                                     idxenv   IN  sys.ODCIEnv)
58          return CLOB
59   is language C name "QMIX_XMETADATA" library XDB.XMLINDEX_LIB
60      with context
61      parameters (
62        context,
63        idxinfo, idxinfo  INDICATOR struct,
64        expver,  expver   INDICATOR,
65        newblock,newblock INDICATOR,
66        idxenv,  idxenv   INDICATOR struct,
67        RETURN OCILobLocator);
68 
69  FUNCTION utlgettablenames(idxinfo  IN  sys.ODCIIndexInfo) return BOOLEAN
70  is language C name "QMIX_TABLEUTILS" library  XDB.XMLINDEX_LIB
71       with context
72       parameters (
73         context,
74         idxinfo, idxinfo  INDICATOR struct,
75         RETURN            INDICATOR sb4,
76         return);
77 
78 END ximetadata_pkg;