Вот теперь давайте создадим, что то осмысленное и попытаемся получить хоть какой-то результат... Снова вступает в бой 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>
Вот теперь хорошо видно, что у нас с вами семь таблиц, семь индексов и, о чудо! Две процедуры! Надеюсь, что вскоре их станет больше! :)