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 <= m <= 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.