Oracle
 sql >> база данни >  >> RDS >> Oracle

4 PL/SQL примера за анонимни блокове

В този урок давам 4 примера за PL/SQL анонимни блокове, за да можете да научите как да създавате и използвате анонимни блокове в базата данни на Oracle. Анонимните блокове в PL/SQL са програмите, които нямат израз за процедура за създаване или създаване на функция и не се записват в базата данни на Oracle. PL/SQL анонимни блокове, използвани предимно за тестване или за стартиране на програмата в базата данни на Oracle само еднократно.

1. PL/SQL анонимен блок за отпечатване на числа в обратен ред

Следната PL/SQL програма ще отпечата числата от 0 до 10 в обратен ред, като използва клауза REVERSE в цикъла for.

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. Таблицата е от HR схемата на базата данни на Oracle. Можете да изтеглите тази схема от следната връзка Изтеглете 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 анонимен блок и отпечатайте

В примера по-долу той ще поиска въвеждането от потребителя за идентификатор на отдел и ще отпечата броя на служителите в този отдел, както и ще отпечата името на отдела.

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 блок използва етикетите за родителски и дъщерен блок. Дъщерният блок ще има достъп до променливата на родителския блок, като използва препратката към етикета на родителския блок. Програмата ще актуализира стария идентификатор на мениджър с нов идентификатор на мениджър за отделите.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL - Как да извлечете най-високите 5 стойности на колона

  2. FROM_TZ() Функция в Oracle

  3. Списък с територии, поддържани от базата данни на Oracle

  4. Как да свържете cx_oracle с Pyinstaller

  5. Леко приключение за покупка