Шаг 88 - PL/SQL - Работаем с процедурами

Вот теперь давайте создадим, что то осмысленное и попытаемся получить хоть какой-то результат... Снова вступает в бой MILLER/KOLOBOK наперевес с SQL*Plus. Запишем такую процедуру:

CREATE OR REPLACE PROCEDURE TESTPRGTWO
IS

BEGIN

	DBMS_OUTPUT.enable;
	DBMS_OUTPUT.put_line('HELLO!!! I AM TESTPRGTWO!!! REMEMBER ME?!');

END TESTPRGTWO;
/

После компиляции получаем:

SQL> CREATE OR REPLACE PROCEDURE TESTPRGTWO
  2  IS
  3  
  4  BEGIN
  5  
  6   DBMS_OUTPUT.enable;
  7      DBMS_OUTPUT.put_line('HELLO!!! I AM TESTPRGTWO!!! REMEMBER ME?!');
  8  
  9  END TESTPRGTWO;
 10  /

Процедура создана.

SQL>

Итак, вот теперь наша процедура выводит приветственное послание - HELLO!!! I AM TESTPRGTWO!!! REMEMBER ME?! Но как в этом убедится, что она вообще, что то выводит? Можно вот так - применив, оператор EXECUTE:

SET SERVEROUTPUT ON
EXEC TESTPRGTWO;

Увидим:

SQL> SET SERVEROUTPUT ON
SQL> EXEC TESTPRGTWO;
HELLO!!! I AM TESTPRGTWO!!! I HEVE REPLACE MYSELF NOW!

Процедура PL/SQL успешно завершена.

Вот теперь судя по последней записи, совершенно ясно, что наша процедура откомпилирована, хранится в БД (поэтому она еще называется хранимая процедура) и выполняет определенные действия. Есть еще и второй способ, это вызвать процедуру на исполнение напрямую из анонимного блока, скажем вот так:

SET SERVEROUTPUT ON

DECLARE 

BEGIN

TESTPRGTWO;

END;
/

Получаем:

SQL> SET SERVEROUTPUT ON
SQL> 
SQL> DECLARE 
  2  
  3  BEGIN
  4  
  5  TESTPRGTWO;
  6  
  7  END;
  8  /
HELLO!!! I AM TESTPRGTWO!!! I HEVE REPLACE MYSELF NOW!

Процедура PL/SQL успешно завершена.

Теперь, анонимный блок вызвал именованный, и после выполнения завершился. Теперь, у нас с вами две процедуры, одна из которых, вообще ничего не делает, а другая приветствует, да и то, только если попросят! :) Давайте посмотрим запрос из прошлого шага, но более полный:

SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
  2  FROM USER_OBJECTS
  3  /

OBJECT_NAME       OBJECT_TYPE        STATUS
----------------- ------------------ -------
BOYS              TABLE              VALID
CUSTOMERS         TABLE              VALID
GIRLS             TABLE              VALID
OFFICES           TABLE              VALID
ORDERS            TABLE              VALID
PRODUCTS          TABLE              VALID
SALESREPS         TABLE              VALID
SYS_C003505       INDEX              VALID
SYS_C003506       INDEX              VALID
SYS_C003507       INDEX              VALID
SYS_C003511       INDEX              VALID
SYS_C003512       INDEX              VALID
SYS_C003513       INDEX              VALID
SYS_C003515       INDEX              VALID
TESTPRG           PROCEDURE          VALID
TESTPRGTWO        PROCEDURE          VALID

16 rows selected

SQL>

Вот теперь хорошо видно, что у нас с вами семь таблиц, семь индексов и, о чудо! Две процедуры! Надеюсь, что вскоре их станет больше! :)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 03.02.2004