Пакет – это объект базы данных, который группирует логически связанные типы, программные объекты и подпрограммы PL/SQL. Под пакетом сразу подразумевается две вещи: спецификация пакета и тело пакета. Спецификация пакета – это интерфейс с перечнем приложений, тут объявляются типы, переменные, константы, исключения, курсоры и подпрограммы, доступные для использования в самом пакете. Тело пакета – здесь уже более подробное определение курсоров и подпрограмм, другими словами их реализация. В отличии от подпрограмм, пакеты нельзя вызывать, передавать им какие-либо параметры или вкладывать пакет друг в друга. Простыми словами, можно сказать, что спецификация пакета – это объявления всех необходимых подпрограмм и прочего, а тело пакета – это более детальное описание каждой подпрограммы – их тела.
Если курсор создается в пакете, то его объявление и спецификация могут быть разделены: объявление курсора указывается в секции объявлений пакета, а реализация курсора - в теле пакета.
При помещении курсора в пакет, можно отделить спецификацию курсора от его тела, используя фразу RETURN, что позволяет изменять тело курсора, не затрагивая его спецификацию.
В фразе RETURN можно использовать:
- атрибут %ROWTYPE, чтобы указать тип записи, которая будет представлять строку в таблице базы данных.
- атрибут %TYPE, чтобы указать тип данных переменной, константы или столбца базы данных
- тип данных - запись (RECORD), чтобы указать тип записи, которая будет представлять строку, возвращаемую запросом, ассоциированным с курсором. Тип данных должен быть объявлен ранее.
В спецификации курсора отсутствует предложение SELECT.
Тело курсора должно иметь в себе запрос SELECT и точно такую же фразу RETURN, как в спецификации пакета.
Реализация курсора при создании пакета может иметь следующее формальное описание:
- CURSOR cursor_name [(parameter
- [, parameter]...)]
- RETURN return_type;