Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Haben verschachtelte Blöcke irgendwelche Auswirkungen auf die Leistung in PL/SQL-Prozeduren?

Sie scheinen Folgendes nicht zu tun:

set timing on
set serveroutput on

declare
  x number := 0;
begin
  dbms_output.put_line('No inner blocks');
  for i in 1..1000000 loop
    x := x + 1;
  end loop;
  dbms_output.put_line(x);
end;
/

anonymous block completed
Elapsed: 00:00:00.095
No inner blocks
1000000

Läuft zur gleichen Zeit, mit ein wenig Variation in jede Richtung, als:

declare
  x number := 0;
begin
  dbms_output.put_line('Nested inner blocks');
  for i in 1..1000000 loop
    begin
      begin
        begin
          begin
            x := x + 1;
          exception
            when others then
              raise;
          end;
        exception
          when others then
            raise;
        end;
      exception
        when others then
          raise;
      end;
    exception
      when others then
        raise;
    end;
  end loop;
  dbms_output.put_line(x);
end;
/

anonymous block completed
Elapsed: 00:00:00.090
Nested inner blocks
1000000

Natürlich ist es möglich, dass der Compiler die redundanten Schichten entfernt, aber ich bin mir nicht sicher, ob er das mit den dortigen Exception-Handlern wirklich kann, da dies das Ergebnis beeinflussen würde.

Ich habe keine Einschränkung gesehen, wie tief verschachtelte Blöcke gehen können - die Dokumentation sagt nur, dass "Blöcke verschachtelt werden können". Das Modell, das Sie verwenden, einen bestimmten Fehler abzufangen und andere verbreiten zu lassen, ist in Ordnung und ziemlich standardisiert - obwohl es in Ihrem erfundenen Beispiel offensichtlich nicht notwendig ist, aber das wissen Sie.