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

4 PL/SQL匿名ブロックの例

    このチュートリアルでは、4つのPL / SQL匿名ブロックの例を示します。これにより、Oracleデータベースで匿名ブロックを作成して使用する方法を学ぶことができます。 PL / SQLの匿名ブロックは、CreateProcedureまたはCreateFunctionステートメントを持たないプログラムであり、Oracleデータベースに保存されません。 PL / SQL匿名ブロックは、主にOracleデータベースでプログラムをテストまたは実行するために1回だけ使用されます。

    1。番号を逆の順序で出力するPL/SQL匿名ブロック

    次のPL/SQLプログラムは、forループでREVERSE句を使用して、0から10までの数字を逆の順序で出力します。

    SET SERVEROUTPUT ON;
    DECLARE
      counter   NUMBER;
    BEGIN
      FOR counter IN REVERSE 0..10 LOOP
        DBMS_OUTPUT.PUT_LINE (counter);
      END LOOP;
    END;
    /

    出力

    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0
    PL/SQL procedure successfully completed.

    2。印刷従業員は部門で数えます

    次のPL/SQLプログラムは、部門90の従業員をカウントします。この表は、OracleデータベースのHRスキーマからのものです。このスキーマは、次のリンク「HRスキーマのダウンロード」からダウンロードできます。

    SET SERVEROUTPUT ON;
    
    DECLARE
       emp_count         NUMBER;
       v_department_id   NUMBER := 90;
    BEGIN
       SELECT COUNT ( * )
         INTO emp_count
         FROM employees
        WHERE department_id = v_department_id;
    
       DBMS_OUTPUT.PUT_LINE(   'The employee count is: '
                            || emp_count
                            || ' for the department with an ID of: '
                            || v_department_id);
    END;
    /

    出力

    The employee count is: 3 for the department with an ID of: 90
    PL/SQL procedure successfully completed.

    3。 PL/SQL匿名ブロックに入力して印刷

    次の例では、部門IDのユーザーからの入力を求め、その部門の従業員数を出力し、部門名も出力します。

    SET SERVEROUTPUT ON;
    
    DECLARE
       dept_id_var   NUMBER (4) := &department_id;
       dept_name     VARCHAR2 (30);
       emp_count     NUMBER;
    BEGIN
       SELECT COUNT ( * )
         INTO emp_count
         FROM employees
        WHERE department_id = dept_id_var;
    
       SELECT department_name
         INTO dept_name
         FROM departments
        WHERE department_id = dept_id_var;
    
       DBMS_OUTPUT.PUT_LINE(   'There are '
                            || emp_count
                            || ' employees '
                            || 'in the '
                            || dept_name
                            || ' department.');
    END;
    /

    出力

    Enter value for department_id: 60
    old   2:   dept_id_var  NUMBER(4) := &department_id;
    new   2:   dept_id_var  NUMBER(4) := 60;
    There are 4 employees in the IT department.
    
    PL/SQL procedure successfully completed.

    4。 <>の例を含むPL/SQLブロック

    次のPL/SQLブロックは、親ブロックと子ブロックのラベルを使用しています。子ブロックは、親ブロックのラベル参照を使用して、親ブロックの変数にアクセスします。プログラムは、部門の古いマネージャーIDを新しいマネージャーIDに更新します。

    SET SERVEROUTPUT ON;
    <<outer_block>>
    DECLARE
       mgr_id       NUMBER (6) := '&current_manager_id';
       dept_count   NUMBER := 0;
    BEGIN
       SELECT COUNT ( * )
         INTO dept_count
         FROM departments
        WHERE manager_id = outer_block.mgr_id;
    
       IF dept_count > 0
       THEN
         <<inner_block>>
          DECLARE
             dept_name   VARCHAR2 (30);
             mgr_id      NUMBER (6) := '&new_manager_id';
          BEGIN
             SELECT department_name
               INTO dept_name
               FROM departments
              WHERE manager_id = outer_block.mgr_id;
    
             UPDATE departments
                SET manager_id = inner_block.mgr_id
              WHERE manager_id = outer_block.mgr_id;
    
             DBMS_OUTPUT.PUT_LINE (
                'Department manager ID has been changed for ' || dept_name);
          END inner_block;
       ELSE
          DBMS_OUTPUT.PUT_LINE (
             'There are no departments listed for the manager');
       END IF;
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          DBMS_OUTPUT.PUT_LINE (
             'There are no departments listed for the manager');
    END outer_block;
    /

    出力

    Enter value for current_manager_id: 100
    old 3: mgr_id NUMBER (6) := '&current_manager_id';
    new 3: mgr_id NUMBER (6) := '100';
    Enter value for new_manager_id: 201
    old 16: mgr_id NUMBER (6) := '&new_manager_id';
    new 16: mgr_id NUMBER (6) := '201';
    Department manager ID has been changed for Executive
    
    PL/SQL procedure successfully completed.
    1. Php-PHPのインストールにWordPressに必要なMySQL拡張機能がないようです

    2. オラクルのカーソルとは

    3. インストールせずにWindowsでpostgresqlとpgadminを起動する

    4. 挿入と更新の両方のMySQLFireトリガー