Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PL/SQL] Oracle error code verschaffen...

Pagina: 1
Acties:

  • 430xlkod
  • Registratie: Januari 2007
  • Laatst online: 05-07 23:11
Hello ppl,

Oké, ik zoek dus een manier om achter de fout code te komen. Meer uitleg hieronder:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE
   stock_price NUMBER := 9.73;
   net_earnings NUMBER := 0;
   pe_ratio NUMBER;
BEGIN
-- Calculation might cause division-by-zero error.
   pe_ratio := stock_price / net_earnings;
   DBMS_OUTPUT.PUT_LINE('Price/earnings ratio = ' || pe_ratio);
EXCEPTION  -- exception handlers begin
-- Only one of the WHEN blocks is executed.
   WHEN ZERO_DIVIDE THEN  -- handles 'division by zero' error
      DBMS_OUTPUT.PUT_LINE('Company must have had zero earnings.');
      pe_ratio := NULL;
   WHEN OTHERS THEN  -- handles all other errors
      DBMS_OUTPUT.PUT_LINE('Some other kind of error occurred.');
      pe_ratio := NULL;
END;  -- exception handlers and block end here
/


Heb voor alle duidelijk te maken met Oracle10g server en SQL*Plus.

Ik wil dus een manier hebben om erachter te komen welke error code (vorm van -xxxxx) achter die 'others' zit. En dan eventueel zelf een exception erachter te schrijven.
De meest bekende fouten zoals no_data_found (+100) en too_many_rows (-1422) kennen we wel, maar wat als er nu dus een error in die 'others' valt, hoe kom je dan achter die code (en eventueel de error tekst)???

EDIT:

Beetje schaamte aangezien ik even mijn PL/SQL leerboek erbij nam en daar staat het wel in (dacht van niet).
Het is dus:
SQL:
1
2
3
4
5
6
EXCEPTION
   WHEN OTHERS THEN
      err_num := SQLCODE;
      err_msg := SUBSTR(SQLERRM, 1, 100);
      DBMS_OUTPUT.PUT_LINE(err_num || ' -- ' || err_msg);
END;

[ Voor 14% gewijzigd door 430xlkod op 16-03-2011 19:20 ]


  • joppybt
  • Registratie: December 2002
  • Laatst online: 09:44
Je weet trouwens dat WHEN OTHERS door velen (mij inclusief) als 'evil' wordt beschouwd?

Je moet alleen 'geplande' fouten afvangen (zoals in jou geval bijvoorbeeld de ZERO_DIVIDE) en afblijven van de OTHERS. Je bent veel beter af met een foutmelding 'Unexpected exception XXXX in LINE 7' dan een programma dat veel later crasht omdat onverwacht pe_ratio op NULL gezet bleek te zijn.

Zoek in google maar eens op 'oracle when others evil'