A DBMS_OUTPUT csomag

A PL/SQL nem tartalmaz I/O utasításokat. A tesztelésnél viszont a program különböző fázisaiban a képernyőn megjelenő információk sokat segíthetnek a belövéshez. A DBMS_OUTPUT csomag eszközöknek egy olyan gyűjteménye, amelynek segítségével a tárolt és a csomagbeli alprogram vagy trigger is üzenetet tud elhelyezni egy belső pufferbe, amelyet azután egy másik alprogram vagy trigger olvashat, vagy a puffer tartalma a képernyőre kerülhet. Ez utóbbi segít a nyomkövetésben.

Az üzenetek az alprogram vagy trigger működése közben kerülnek a pufferbe, de csak a befejeződés után olvashatók. Ha ezeket nem olvassa egy másik alprogram vagy nem kerülnek képernyőre, akkor elvesznek.

A csomag a következő típust tartalmazza:

TYPE CHARARR TABLE OF VARCHAR2(32767)

INDEX BY BINARY_INTEGER;

Ez szolgál az üzenetek kezelésére.

A csomag eljárásai a következők:

ENABLE(m IN INTEGER DEFAULT 20000)

Engedélyezi a csomag további eljárásainak használatát és beállítja az üzenetpuffer méretét m-re (2000 <= <= 1000000).

DISABLE

Paraméter nélküli, letiltja a csomag további eljárásainak használatát és törli az üzenetpuffer tartalmát.

PUT(a IN VARCHAR2) és PUT_LINE(a IN VARCHAR2)

Az a üzenetet elhelyezik az üzenetpufferben. A PUT_LINE ezután még odaír egy sorvége jelet is.

NEW_LINE

Paraméter nélküli, az üzenetpufferben elhelyez egy sorvége jelet.

GET_LINE(l OUT VARCHAR2, s OUT INTEGER)

Az üzenetpufferből az l-be olvas egy sort (sorvége jelig). Az s értéke 0, ha az olvasás

sikeres volt, egyébként 1. Törli az üzenetpuffer tartalmát.

GET_LINES(l OUT CHARARR, n IN OUT INTEGER)

n számú sort olvas be az üzenetpufferből l-be. Az olvasás után n értéke a ténylegesen olvasott üzenetsorok darabszáma. Törli az üzenetpuffer tartalmát.

Az SQL*Plus SET parancsának segítségével szabályozhatjuk az üzenetpuffer tartalmának automatikus képernyőre írását.

Ha kiadjuk a következő parancsot, akkor az automatikus ENABLE hívást eredményez n puffermérettel vagy UNLIMITED esetén a maximális puffermérettel. A SIZE elhagyása esetén UNLIMITED az alapértelmezett.

SET SERVEROUTPUT ON [SIZE {n | UNLIMITED}]

Ezután pedig minden név nélküli PL/SQL blokk végrehajtása után a rendszer végrehajt egy GET_LINES hívást és az üzenetsorokat a képernyőre írja. Tehát a futás közben az üzenetpufferbe írt információk a futás után láthatók a képernyőn.

A könyv egyéb fejezeteinek példáiban sokszor alkalmazzuk ezt az eszközrendszert, ezért itt külön példát most nem adunk.