Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apakah blok bersarang memiliki dampak kinerja dalam prosedur PL/SQL?

Mereka tampaknya tidak:

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

Berjalan dalam waktu yang sama, dengan sedikit variasi di setiap arah, seperti:

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

Tentu saja mungkin kompiler menghapus lapisan yang berlebihan, tetapi saya tidak yakin itu benar-benar dapat dilakukan dengan penangan pengecualian di sana karena akan mempengaruhi hasilnya.

Saya belum melihat batasan tentang seberapa dalam blok bersarang - dokumentasi hanya mengatakan 'blok dapat bersarang'. Model yang Anda gunakan, menangkap kesalahan tertentu dan membiarkan orang lain menyebar, baik-baik saja dan cukup standar - meskipun jelas dalam contoh Anda yang dibuat-buat itu tidak perlu, tetapi Anda tahu itu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01401:nilai yang dimasukkan terlalu besar untuk kolom CHAR

  2. Apa yang dimaksud dengan tabel BIN$... di tabel ALL_TAB_COLUMNS Oracle?

  3. Daftar kunci asing dan tabel yang dirujuk di Oracle DB

  4. Artefak yang hilang com.Oracle:ojdbc6:jar:11.2.0.3

  5. Ambil daftar prosedur/fungsi pribadi dari badan paket