Для курсоров установлен ряд ограничений. К примеру, программа PL/SQL не может передавать курсор другой программе в качестве параметра – открывать курсор и обрабатывать соответствующую информацию можно только непосредственно в самой программе. Работая с курсором и учитывая его функциональные ограничения, можно объявлять в программе курсорные типы (cursor types), определяемые пользователями, и соответствующие курсорные переменные (cursor variables). Например, в следующем фрагменте программы объявляются два различных курсорных типа и соответствующие курсорные переменные.
declare
-- СТРОГИЙ, КОНКРЕТНЫЙ КУРСОРНЫЙ ТИП
type parts_type is ref cursor return sales.parts %rowtype;
-- СООТВЕТСТВУЮЩИЕ КУРСОРНЫЕ ПЕРЕМЕННЫЕ
parts_cursor1 parts_type;
parts_cursor2 parts_type;
parts_cursor3 parts_type;
-- НЕСТРОГИЙ, ОБОБЩЕННЫЙ КУРСОРНЫЙ ТИП
type cursor_type is ref cursor;
…
Первый курсорный тип, PARTS_TYPE, является строгим (strong), так как в объявление курсорного типа включен возврат (RETURN clause), в котором указана форма (shape) или набор атрибутов курсорного типа. Следовательно, строгий курсорный тип ограничивает определение курсорных переменных впоследствии использующих этот тип. Применяются такие типы, если необходимо явно ограничивать форму курсорных переменных.
В отличие от первого, второй курсорный тип, CURSOR_TYPE, является нестрогим: он не содержит своего описания. Такие типы можно использовать в программах для объявления курсорных переменных любой формы.
После объявления курсорной переменной программа может открывать и выбирать соответствующие строки в базе данных для обработки информации. Кроме того, программа может передавать курсорную переменную и ее текущее состояние другой программе для обработки, так как курсорные переменные программ PL/SQL подобны указателям, используемым в других языках программирования.
Выше было дано общее представление о типах конструкций, которые можно объявить в блоке PL/SQL. Теперь посмотрим, какие функции можно выполнять в теле PL/SQL (и в разделе обработки исключительных ситуаций). Далее в общих чертах будут представлены некоторые основные функциональные возможности PL/SQL.
Для управления работой типичной процедурной программы применяются определенные логические схемы. В PL/SQL процессом выполнения программ можно управлять при помощи условной, итерационной и последовательной логики. Далее рассказано о различных операторах управления выполнением программ в PL/SQL.