> 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;
PROCEDURE ABCD compiled
> -- testování
> PROMPT dopadne to dobře
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;
anonymous block completed
dopadlo to dobře, výsledek je Ivan Halaška

> PROMPT  dopadne to špatně
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;
anonymous block completed
dopadlo to špatně z dùvodu  ORA-01422: exact fetch returns more than requested number of rows