A fordító figyelmeztetései

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:

A fordító szempontjából minden figyelmeztetés három lehetséges állapot egyikében lehet:

  1. DISABLE: tiltott, a figyelmeztetés nem generálódik a fordítás során,

  2. ENABLE: engedélyezett, a figyelmeztetés generálódik a fordítás során, a kód lefordul,

  3. 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.