-- script ilustruje odsun hlášení chyby z procedury do volajícícho prostředí
--
set echo on
create or replace procedure ABCD (p_a OUT BOOLEAN,               -- dopadlo to dobře?
                                  p_b OUT varchar2,              -- výsledek dotazu, nebo kód chyby
                                  p_zadani in PLS_INTEGER := 0)  -- nula - chci dobře, nenula - chci špatně
as
-- procedura slouží k demonstraci přesunu 
-- zpracování chyby z procedury do volajícího prostředí
begin
  if P_ZADANI = 0 then select JMENO into P_B from OSOBA where rownum=1;
                  else select JMENO into P_B from OSOBA;
end if;                           
  P_A := true;
EXCEPTION
when OTHERS then
    P_A := false;
    P_B := SQLERRM;
end;
/
-- testování
PROMPT dopadne to dobře
set SERVEROUTPUT on
declare
  g_a BOOLEAN;
  g_b varchar2(200);
begin 
  ABCD(G_A, G_B);
  if G_A then DBMS_OUTPUT. PUT_LINE('dopadlo to dobře, výsledek je ' || G_B);
         else DBMS_OUTPUT. PUT_LINE('dopadlo to špatně z důvodu  ' || G_B);
  end if;
end;
/
PROMPT  dopadne to špatně
declare
  G_A BOOLEAN;
  g_b varchar2(200);
begin 
  ABCD(G_A, G_B, 1);
  if G_A then DBMS_OUTPUT. PUT_LINE('dopadlo to dobře, výsledek je ' || G_B);
         else DBMS_OUTPUT. PUT_LINE('dopadlo to špatně z důvodu  ' || G_B);
  end if;
end;
/