sql >> データベース >  >> RDS >> Oracle

ネストされたブロックは、PL / SQLプロシージャのパフォーマンスに影響を与えますか?

    次のようには表示されません:

    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
    

    次のように、それぞれの方法で少し変化を伴って、同時に実行されます。

    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
    

    もちろん、コンパイラが冗長なレイヤーを削除している可能性はありますが、結果に影響を与えるため、例外ハンドラーを使用して実際に削除できるかどうかはわかりません。

    ネストされたブロックの深さに関する制限は見ていません。ドキュメントには、「ブロックをネストできる」とだけ記載されています。使用しているモデルは、特定のエラーをキャッチして他のエラーを伝播させるので、問題なく、かなり標準的です。ただし、考案した例では明らかに必要ありませんが、それはわかっています。




    1. 高速パンダデータフレームをpostgresに書き込む

    2. ajax呼び出しを介してtextareaにテキストをロードします

    3. OracleSQLではNULLではなく最小値

    4. フルテキストインデックスと複合インデックス、およびそれらがクエリに与える影響