2014-01-19 12 views
20

Ich verstehe nicht ganz den Punkt der Funktion dbms_lob.createtemporary(). Wie wird:Was ist der Punkt von dbms_lob.createtemporary()?

DECLARE 
    myclob CLOB; 
BEGIN 
    myclob := 'foo'; 
END; 

anders aus:

DECLARE 
    myclob CLOB; 
BEGIN 
    dbms_lob.createtemporary(myclob, TRUE); 
    myclob := 'foo'; 
    dbms_lob.freetemporary(myclob); 
END; 

ich die Aktionen zwischen dem Erstellen der Annahme und kostenlose Anrufe machen es relevant, aber ich bin einfach nicht klar, wie.

+0

Wahrscheinlich gibt 'dbms_lob.freemetemporary' den Speicherblock frei (der sehr groß sein kann), ohne auf die Variable zu warten, da dies den Gültigkeitsbereich verlässt, sodass Sie die Speichernutzung etwas flexibler steuern können. –

Antwort

14

In früheren Zeiten waren Sie immer gezwungen, das DBMS_LOB-Paket zu verwenden. Dann wurde in Oracle 10g eine Funktion namens "SQL-Semantik für LOB" eingeführt und Sie können nun die vereinfachte Syntax verwenden.

In CREATETEMPORARY können Sie die Dauer des LOB in SQL-Semantik können Sie nicht angeben.

In Ihrem Fall wird das LOB auf die gleiche Weise freigegeben, d. H. Wenn Sie den Gültigkeitsbereich verlassen (d. H. Den PL/SQL-Block), in dem das LOB deklariert ist, wird es freigegeben.

Wenn Sie FREETEMPORARY verwenden, wird das temporäre Segment im Tablespace freigegeben. Wenn Sie myclob := NULL; aufrufen, wird es beibehalten.

Verwandte Themen