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

PL / SQL BEGIN ... ENDブロックはいつネストする必要がありますか?

    次のようにローカルで例外を処理する場合:

    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;
    

    この例では、例外が処理されてから、次の従業員を続行して処理します。

    もう1つの使用法は、次のようにスコープが制限されているローカル変数を宣言することです。

    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;
    

    念のために言っておきますが、これを実行したいということは、プログラムが大きすぎるために分割する必要があることを示していることがよくあります。

    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. クエリ内の連結JSON(B)列のマージ

    2. より長いVARCHAR2列を定義することの影響

    3. MySQLおよびMariaDBデータベースのクラウドバックアップオプション

    4. アプリケーションが起動するたびにリソースIDが変更されますか