Figyelmeztetéseket a fordítási hibákhoz hasonlóan a fordítás során kaphatunk. Ezek a kódban található nem biztonságos, nem konzisztens kódrészlet előfordulását jelzik. A kód lehetfélreérthető, tartalmazhat elérhetetlen kódrészletet, hivatkozhat definiálatlan előfordítóiértékdirektívára, tartalmazhat teljesítménycsökkenést okozó implicit konverziót stb.
A figyelmeztetések generálását vagy tiltását a PLSQL_WARNINGS paraméterrel tudjuk szabályozni, az alapértelmezett értéke ’DISABLE:ALL’ letiltja a figyelmeztetések generálását.
A figyelmeztetések tartalmaznak egy hibakódot PLW-XXXXX alakban. Jelenleg 11 parametrizált figyelmeztetést találunk a hivatalos Oracle-dokumentációban (lásd [16] 37.
fejezet).
A figyelmeztetések (a kódjuk alapján) három csoportba tartoznak. A kategóriák megkönnyítik a figyelmeztetések állapotának kezelését:
SEVERE (SÚLYOS): a kiváltó kód nem várt viselkedést, rossz működést eredményezhet;
PERFORMANCE (TELJESÍTMÉNY): a kiváltó kód a teljesítmény csökkenését eredményezi (például implicit konverzió hozzárendelt változónál SQL utasításban, vagy NOCOPY elhagyása);
INFORMATIONAL (TÁJÉKOZTATÓ): a kód szemantikailag nem hibás és nem is okoz teljesítménycsökkenést, viszont kevésbé karbantartható és olvasható, például elérhetetlen kódrészlet van a programban.
A fordító szempontjából minden figyelmeztetés három lehetséges állapot egyikében lehet:
DISABLE: tiltott, a figyelmeztetés nem generálódik a fordítás során,
ENABLE: engedélyezett, a figyelmeztetés generálódik a fordítás során, a kód lefordul,
ERROR: hiba, a figyelmeztetés fordítási hibát generál, a kód nem fordul le.
Az állapotok beállítása kategória vagy kód alapján lehetséges:
PLSQL_WARNINGS = 'beállítás' [, 'beállítás']...
beállítás:
állapot:{ ALL | kategória | kódszám |
( kódszám [, kódszám ]… )}
A figyelmeztetések a fordítási hibákhoz hasonlóan a {DBA|ALL|USER}_ERRORS nézetből, vagy az SQL*Plus SHOW ERRORS parancsával kérdezhetők le. A figyelmeztetések rendszerszintű bekapcsolását javasoljuk használni (ALTER SYSTEM SET …).
Példa
-- Munkamenet beállítása, figyelmezetések tiltása
ALTER SESSION SET
PLSQL_WARNINGS='DISABLE:ALL'
PLSQL_CCFLAGS=''
-- Csúnya, de hibátlan alprogram
CREATE OR REPLACE PROCEDURE proc_warn
IS
v_Id VARCHAR2(100);
v_Name VARCHAR2(100);
to_char BOOLEAN; -- PLW-05004, megengedett, TO_CHAR nem kulcsszó
BEGIN
$IF $$kojak $THEN $END -- PLW-06003, kojak nincs a PLSQL_CCFLAGS-ben
SELECT cim
INTO v_Name
FROM konyv
WHERE id = v_Id -- PLW-07204, id NUMBER, v_id VARCHAR2
;
IF FALSE THEN
NULL; -- PLW-06002, az IF feltétele mindig hamis
END IF;
END proc_warn;
/
SHOW ERRORS;
/*
Az eljárás létrejött.
Nincsenek hibák.
*/
-- Súlyos figyelmeztetések engedélyezése
ALTER PROCEDURE proc_warn COMPILE
PLSQL_WARNINGS='DISABLE:ALL', 'ENABLE:SEVERE';
SHOW ERRORS;
/*
SP2-0805: Az eljárás fordítási figyelmeztetésekkel lett módosítva.
Hibák PROCEDURE PROC_WARN:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/3 PLW-05004: a(z) TO_CHAR azonosító a STANDARD csomagban is
definiálva van vagy beépített SQL elem.
*/
-- Teljesítmény figyelmeztetések engedélyezése
ALTER PROCEDURE proc_warn COMPILE
PLSQL_WARNINGS='DISABLE:ALL', 'ENABLE:PERFORMANCE';
SHOW ERRORS;
/*
SP2-0805: Az eljárás fordítási figyelmeztetésekkel lett módosítva.
Hibák PROCEDURE PROC_WARN:
LINE/COL ERROR
-------- -----------------------------------------------------------------
11/15 PLW-07204: az oszlop típusától eltérő konverzió optimum alatti
lekérdezési szerkezetet eredményezhet
*/
-- Tájékoztató figyelmeztetések engedélyezése
ALTER PROCEDURE proc_warn COMPILE
PLSQL_WARNINGS='DISABLE:ALL', 'ENABLE:INFORMATIONAL';
SHOW ERRORS;
/*
SP2-0805: Az eljárás fordítási figyelmeztetésekkel lett módosítva.
Hibák PROCEDURE PROC_WARN:
LINE/COL ERROR
-------- -----------------------------------------------------------------
7/7 PLW-06003: ismeretlen lekérdezési direktíva: '$$KOJAK'
13/6 PLW-06002: Nem elérhető kód
-- Minden figyelmeztetés legyen fordítási hiba
ALTER PROCEDURE proc_warn COMPILE
PLSQL_WARNINGS='ERROR:ALL';
SHOW ERRORS;
/*
Figyelmeztetés: Az eljárás módosítása fordítási hibákkal fejeződött be.
Hibák PROCEDURE PROC_WARN:
LINE/COL ERROR
-------- -----------------------------------------------------------------
7/7 PLS-06003: ismeretlen lekérdezési direktíva: '$$KOJAK'
*/
A figyelmeztetések beállításai módosíthatók a DBMS_WARNING csomag eljárásaival is. A csomag ezenkívül tartalmaz még függvényeket a beállítások lekérdezésére.