sql >> Database >  >> RDS >> Oracle

Wanneer moet ik PL/SQL BEGIN...END-blokken nesten?

Als u uitzonderingen lokaal als volgt wilt afhandelen:

begin
   for emp_rec in (select * from emp) loop
      begin
         my_proc (emp_rec);
      exception
         when some_exception then
            log_error('Failed to process employee '||emp_rec.empno);
      end;
   end loop;
end;

In dit voorbeeld wordt de uitzondering afgehandeld en gaan we verder en verwerken we de volgende medewerker.

Een ander gebruik is om lokale variabelen met een beperkte reikwijdte als volgt te declareren:

declare
    l_var1 integer;
    -- lots of variables
begin
   -- lots of lines of code
   ...
   for emp_rec in (select * from emp) loop
      declare
         l_localvar integer := 0;
      begin
         -- Use l_localvar
         ...
      end
   end loop;

end;

Let wel, dit willen doen is vaak een teken dat je programma te groot is en moet worden afgebroken:

declare
   l_var1 integer;
   -- lots of variables
   ...
   procedure local_proc (emp_rec emp%rowtype):
      l_localvar integer := 0;
   begin
      -- Use l_localvar
      ...
   end
begin
   -- lots of lines of code
   ...
   for emp_rec in (select * from emp) loop
      local_proc (emp_rec);
   end loop;

end; 


  1. Hoe 2 datums in orakel af te trekken om het resultaat in uren en minuten te krijgen

  2. INSERT rijen in meerdere tabellen in een enkele query, selecteren uit een betrokken tabel

  3. Django, mod_wsgi, psycopg2 Onjuist geconfigureerd:fout bij het laden van psycopg2-module:geen module met de naam _psycopg

  4. Kan geen verbinding maken met localhost, maar wel met computernaam in SQL Server 2008