2010-11-23 6 views
0

So auf 11g kann ich folgende plsql ohne Probleme ausführen:Warum funktioniert XMLTYPE.getClobVal() nicht auf 9i wie auf 11g?

DECLARE 
    lob1 CLOB; 

BEGIN 

    SELECT e.xml_col.getClobVal() INTO lob1 FROM "XML"."XML_TABLE" e WHERE KEY_COL=3 ; 
    DBMS_LOB.APPEND(lob1, 'is a test node</test>'); 

END; 

Aber auf 9i den gleichen Code führt zu einem ORA-22275: invalid LOB-Locator angegebene Fehler.

Irgendwelche Ideen, warum das wäre?

Antwort

0

Kommt die Ausnahme von diesem Aufruf dbms_lob.append? Es sollte zwei LOBs nehmen, aber Sie übergeben ein String-Literal als zweiten Parameter. Gibt es vielleicht eine Änderung in der impliziten Typumwandlung von 9i zu 11g? Ich habe keine 9i-Datenbanken mehr, um es auszuprobieren.

0

Pardon, aber ich kann es nicht reproduzieren kann, auf meine 9.2.0.1.0, funktioniert dieses Beispiel einwandfrei:

declare 
    fOrigXml XmlType := XmlType(
'<RootNode> 
    <ChildNodes> 
    </ChildNodes> 
</RootNode>'); 
    t clob; 

begin 
    select fOrigXml.getClobVal() into t from dual; 
    dbms_lob.append(t, '4343'); 
    dbms_output.put_line(t); 
end; 
/

Könnten Sie versuchen diese und beantworten, ob dies für Sie?

0

Ich bin nicht sicher, ob das hilft, aber Sie können versuchen, Ihre clob Variable zu öffnen zuerst:

DBMS_LOB.createTemporary(lob1, cache => FALSE); 
DBMS_LOB.Open(lob1, DBMS_LOB.lob_readwrite);