Шаг 87 - PL/SQL - Именованные блоки процедуры

Закончив знакомство с синтаксисом и объявлениями, давайте наконец, займемся делом. Напишем нашу с вами первую процедуру и познакомимся со всем, что с этим связано. Итак, запускаем SQL*Plus и отправим на исполнение следующий код: (программирование однако!)

CREATE PROCEDURE TESTPRG
AS

BEGIN
		
	NULL;

END TESTPRG;
/

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

SQL> CREATE PROCEDURE TESTPRG
  2  AS
  3  
  4  BEGIN
  5    
  6    NULL;
  7  
  8  END TESTPRG;
  9  /

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

SQL>

Ура! Наша первая с вами процедура создана и находится внутри нашего сервера и не только находится, но еще и готова к дальнейшему использованию! Итак, для начала давайте убедимся, что она есть и здорова! Введем следующий запрос:

SELECT OBJECT_NAME, OBJECT_TYPE, STATUS 
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'PROCEDURE'
/

Получаем после прохода:

SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS 
  2  FROM USER_OBJECTS
  3  WHERE OBJECT_TYPE = 'PROCEDURE'
  4  /

OBJECT_NAME   OBJECT_TYPE    STATUS
------------  -----------	------
TESTPRG       PROCEDURE      VALID

SQL>

Что ж теперь в вашем владении есть процедура TESTPRG и она совершенно исправна, о чем говорит запись в поле STATUS со значением VALID. К слову сказать, при выполнении оператора CREATE PROCEDURE вследствие того, что он является оператором DDL, то неявно вызывается оператор COMMIT. Помните в шаге 6, я намеренно сделал ошибку сказав, что сделайте COMMIT после оператора GRANT! После чего получил кучу нареканий, от некоторых гугу жанра! Но, я это сделал по той простой причине, .... а впрочем какая разница, сделал я это намеренно или нет! :) Идем дальше. Итак, теперь надеюсь кое-что стало яснее. При первом приближении хорошо видно, что наша процедура совершенно бесполезна, так как, в объявлении ее тела стоит только оператор NULL, который как мы знаем ничего собственно не делает кроме как объявляет сам себя. Но это не так ведь мы с вами учимся, значит это не совсем бесполезно! :) Оставим в покое нашу процедуру, в плане полезности и попробуем, немного переделать ее:

CREATE PROCEDURE TESTPRG
IS

BEGIN
	-- Empty Operator -------
	NULL;

END TESTPRG;
/

Получаем:

SQL> CREATE PROCEDURE TESTPRG
  2  IS
  3  
  4  BEGIN
  5    -- Empty Operator -------
  6    NULL;
  7  
  8  END TESTPRG;
  9  /
CREATE PROCEDURE TESTPRG
                 *
ошибка в строке 1:
ORA-00955: имя уже задействовано для существующего объекта

Ой - а вот здесь, как раз нужно было ее удалить, а потом вновь создать, например вот так:

DROP PROCEDURE TESTPRG
/

Увидим:

SQL> DROP PROCEDURE TESTPRG
  2  /

Процедура удалена.

Но, это не совсем рентабельно, давайте снова создадим нашу с вами процедуру, но несколько по другому:

CREATE OR REPLACE PROCEDURE TESTPRG
AS

BEGIN
		
	NULL;

END TESTPRG;
/

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

SQL> CREATE OR REPLACE PROCEDURE TESTPRG
  2  AS
  3  
  4  BEGIN
  5    
  6    NULL;
  7  
  8  END TESTPRG;
  9  /

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

SQL>

Вот теперь изменить ее можно так же за один проход не применяя DROP PROCEDURE TESTPRG! Попробуем проделать следующее:

CREATE OR REPLACE PROCEDURE TESTPRG
IS

BEGIN
	-- Empty Operator -------
	NULL;

END TESTPRG;
/

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

SQL> CREATE OR REPLACE PROCEDURE TESTPRG
  2  IS
  3  
  4  BEGIN
  5     -- Empty Operator -------
  6    NULL;
  7  
  8  END TESTPRG;
  9  /

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

SQL>

Все что мы сделали - это добавили строку комментария и сменили AS на IS, что само по себе не принципиально, но позволяет показать как можно создать процедуру изменить ее или удалить! Вот и все три действия, которыми мы как правило пользуемся! Думаю, что теперь вы сами можете что-нибудь создать! :)


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