Oracle
 sql >> Baza danych >  >> RDS >> Oracle

4 przykłady anonimowych bloków PL/SQL

W tym samouczku podaję 4 przykłady anonimowych bloków PL/SQL, abyście mogli nauczyć się tworzyć i używać anonimowych bloków w bazie danych Oracle. Bloki anonimowe w PL/SQL to programy, które nie mają żadnej instrukcji Create Procedure ani Create Function i nie są zapisywane w bazie danych Oracle. Anonimowe bloki PL/SQL używane głównie do testowania lub do jednorazowego uruchomienia programu w bazie danych Oracle.

1. Anonimowy blok PL/SQL do drukowania liczb w odwrotnej kolejności

Poniższy program PL/SQL wypisze liczby od 0 do 10 w odwrotnej kolejności, używając klauzuli REVERSE w pętli for.

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

Wyjście

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

2. Drukuj liczbę pracowników w dziale

Poniższy program PL/SQL policzy pracowników w dziale 90. Tabela pochodzi ze schematu HR bazy danych Oracle. Możesz pobrać ten schemat, klikając poniższy link Pobierz schemat 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;
/

Wyjście

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

3. Pobieraj dane wejściowe w anonimowym bloku PL/SQL i drukuj

W poniższym przykładzie poprosi użytkownika o wprowadzenie identyfikatora działu i wydrukuje liczbę pracowników w tym dziale, a także wydrukuje nazwę działu.

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;
/

Wyjście

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. Blok PL/SQL z <> Przykładem

Poniższy blok PL/SQL używa etykiet dla bloku nadrzędnego i podrzędnego. Blok podrzędny uzyska dostęp do zmiennej bloku nadrzędnego za pomocą odniesienia do etykiety bloku nadrzędnego. Program zaktualizuje stary identyfikator menedżera o nowy identyfikator menedżera dla działów.

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;
/

Wyjście

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować XMLTYPE w VARCHAR w ORACLE?

  2. Jak usunąć wszystkie tabele użytkowników?

  3. cx_Oracle:Jak mogę otrzymać każdy wiersz jako słownik?

  4. CRS 11.2.0

  5. Używanie zmiennych bind z dynamiczną klauzulą ​​SELECT INTO w PL/SQL