Присвоить значение переменной oracle
Record представляет собой группу связанных элементов данных, хранящихся в полях, каждая со своим именем и типом данных. Вы можете использовать Record как переменную, которая может содержать строку таблицы или некоторые столбцы (поля) из строки таблицы.
Объявление переменной PL/SQL
Когда вы объявляете переменную, PL/SQL выделяет память для хранения ее значения и присваивает выделенной области памяти имя, по которому это значение можно извлекать и изменять. В объявлении также задается тип данных переменной; он используется для проверки присваиваемых ей значений. Базовый синтаксис объявления переменной или константы:
Здесь имя — имя переменной или константы, тип_данных — тип или подтип данных PL/SQL, определяющий, какие значения могут присваиваться переменной. При желании можно включить в объявление выражение NOT NULL ; если такой переменной не присвоено значение, то база данных инициирует исключение. Секция значение_по_умолчанию инициализирует переменную начальным значением; ее присутствие обязательно только при объявлении констант. Если переменная объявляется с условием NOT NULL , то при объявлении ей должно быть присвоено начальное значение.
Примеры объявления переменных разных типов:
Конструкция DEFAULT (см. l_right_now в приведенном примере) и конструкция с оператором присваивания ( l_favorite_flavor в приведенном примере) эквивалентны и взаимозаменяемы. Какой из двух вариантов использовать? Мы предпочитаем для констант использовать оператор присваивания (:=), а для инициализации переменных — ключевое слово DEFAULT . При объявлении константы задается не значение по умолчанию, а значение, которое не может быть изменено впоследствии, поэтому DEFAULT кажется неуместным.
Атрибуты курсоров
В примере, приведенном в листинге А.4, для указания того, когда цикл должен завершаться, используется специальный атрибут курсора %NOTFOUND. Атрибуты курсоров очень полезны при работе с явными курсорами. Наиболее важные из них перечислены ниже.
- %ISOPEN. Булевский атрибут, который после завершения выполнения SQL-оператора возвращает false. До тех пор, пока курсор остается открытым, он возвращает true.
- %FOUND. Булевский атрибут, который выполняет проверку на предмет наличия подходящих для SQL-оператора строк, т.е. остались ли у курсора еще какие-то строки для извлечения.
- %NOTFOUND. Булевский атрибут, который сообщает о том, что не удалось обнаружить ни одной подходящей для SQL-оператора строки, т.е. у курсора больше не осталось никаких строк для извлечения.
- %ROWCOUNT. Атрибут, который возвращает информацию о том, сколько курсору удалось извлечь строк на текущий момент.
Преимущества объявлений с привязкой
Во всех объявлениях тип переменной (символьный, числовой, логический и т. д.) задается явно. В каждом объявлении непосредственно указывается тип данных и, как правило, ограничение, налагаемое назначение этого типа. Это распространенный подход к объявлению переменных, но в некоторых ситуациях он может вызвать проблемы.
Как переменной присвоить результат select-а
есть вот такой select. select add_months(trunc(sysdate,'MM'),-1) + level -1 x from dual connect.
Инициализация переменной через результат запроса
Здравствуйте. Можно ли в PL/SQL задать значение переменной через запрос? Например как-то так.
Как строке присвоить результат запроса
Есть запрос QueryClientsALLMan который возвращает одно значение поля Name из таблицы В VBA.
SQL. узнать результат выполнения запроса
Дана реляционная модель базы данных Таблица Customer содержит информацию о клиентах.
Во-первых, запрос должен возвращать только id
Во-вторых, запрос должен возвращать ровно одну строку.
В-третьих, нужно читать синтаксис языка, а не изобретать самопальные конструкции
В-четвертых, нужно определить переменную, желательно, типа поля id
Правильный синтаксис при соблюдении перечисленных выше условий такой:
А если запрос возвращает несколько строк, то нужно действовать как-то иначе, например, присваивать переменной значения в цикле. Или передавать значения в коллекцию. Или писать их в другую таблицу. Все зависит от поставленной задачи. Ниже приводится вывод значений в переменную в цикле через неявный курсор.
Насколько я понимаю, вместо :dealno нужно подставить значение. Поскольку это варчар, что будет что-то типа 'ABCDE' (строка в апострофах)
AGK
после етого скрипта нужно разместить другой скрипт которий возьмет в работу переменную var_id
подскажите как ето сделать
Обычно все пишут в одном блоке. Или делают процедуру, которая выполняет все действия. Очень неопределенный вопрос.
Если есть два блкока, из них всегда можно сделать один блок
Добавлено через 2 минуты
Или, например, из первого блока сделать функцию, которая возвращает значение переменной, а из второго блока - процедуру, которая принимает и обрабатывает это значение
как ето сделать?
a.id и DEALID должни подставлятся(константа которая определяется в начале), чтоби не подвисала база
Селект, обычно, не может вызываться просто так в анонимном блоке.
Его надо либо вызывать интерактивно (в каком-то средстве разработки или просмотра БД), и тогда Вы видите результат на экране, либо его результат надо вставлять в какую-то другую таблицу. Если объем информации выводимых записей мал, его можно вывести в спул (на экран компьютера в Вашей сесии), но на это лучше не ориентироваться.
Ваш второй селект написан с ошибками.
1. Нельзя использовать служебные слова (например, SUM) в качестве алиасов. При попытке запустить селект будет ошибка.
2. Очень дурной тон использовать неявное преобразование типов. У Вас дата задается в виде строки, а ее надо задать в виде даты, иначе правильность селекта будет зависеть от NLS-настроек компьютера. Например, у меня Ваш селект просто не пройдет.
В принципе, можно первый селект засунуть в конструкцию WITH, а во втором селекте взять значение поля id из этой конструкции. Тогда можно будет просто запустить один селект, в котором будут выполнены обе части Вашей задачи.
Хотя язык SQL и является легким в изучении и обладает массой мощных функциональных возможностей, он не позволяет создавать такие процедурные конструкции, которые возможны в языках третьего поколения вроде C. Язык PL/SQL является собственным расширением языка SQL от Oracle и предлагает функциональность серьезного языка программирования. Одно из главных его преимуществ состоит в том, что он позволяет использовать в базе данных такие программные единицы, как процедуры и пакеты, и тем самым увеличивать возможность повторного использования кода и его производительность.
Написание исполняемых операторов PL/SQL
После оператора BEGIN можно начинать вводить все свои желаемые SQL-операторы. Выглядеть эти операторы должны точно так же, как обычные операторы SQL. При использовании операторов SELECT и INSERT в PL/SQL, правда, необходимо помнить об особенностях, о которых более подробно речь пойдет в следующих разделах.
Привязка к курсорам и таблицам
Мы уже рассмотрели примеры объявления переменных с привязкой к столбцу базы данных и другой переменной PL/SQL. Теперь давайте посмотрим, как используется атрибут привязки % ROWTYPE .
Допустим, нам нужно выбрать одну строку из таблицы books. Вместо того чтобы с помощью атрибута %TYPE объявлять для каждого столбца таблицы отдельную переменную, можно воспользоваться атрибутом %ROWTYPE :
Теперь предположим, что из таблицы book необходимо выбрать только имя автора и название книги. В этом случае мы сначала явно определим курсор, а затем на его основе объявим переменную:
Наконец, следующий пример демонстрирует неявное использование атрибута %ROWTYPE в объявлении записи book_rec цикла FOR :
Использование DML-операторов в PL/SQL
Любые операторы INSERT, DELETE или UPDATE работают в PL/SQL точно так же, как в обычном SQL. Однако в PL/SQL после каждого из них можно также применять оператор COMMIT, как показано ниже:
Параметры или аргументы
type_rec_name – имя определенного типа Record
var_rec – имя переменной типа Record
field_1 , field_2 ,… field_n – поля типа Record
datatype – тип данных для полей типа Record. Может быть любой из списка:
Типы данных БД | Описание |
---|---|
collection_name | Коллекция (associative array, nested table или varray), ранее объявленная в текущей области. |
collection_type_name | Пользовательский тип коллекции, определенный с использованием спецификатора типа данных TABLE или VARRAY. |
CONSTANT | Обозначает объявление константы. Вы должны инициализировать константу при объявлении. После инициализации значение константы не может быть изменено. |
constant_name | Программная константа. |
cursor_name | Явный курсор, ранее объявленный в текущей области. |
cursor_variable_name | Переменная курсора PL/SQL, ранее объявленная в текущей области. |
db_table_name | Таблица базы данных или представление, которые должны быть доступны при декларировании. |
db_table_name.column_name | Таблица базы данных и столбец, которые должны быть доступны при декларировании. |
expression | Комбинация переменных, констант, литералов, операторов и вызовов функций.Простейшее выражение состоит из одной переменной. Когда декларирование в разработке, значение выражения присваивается константе или переменной.Значение и константы или переменной должны иметь совместимые типы данных. |
NOT NULL | Ограничение, которое запрещает программе присваивать значение null переменной или константе. Присвоение значения null переменной, определенной как NOT NULL, вызывает предопределенное исключение VALUE_ERROR. Ограничению NOT NULL должно следовать в предложении инициализации. |
object_name | Экземпляр типа объекта, ранее объявленного в текущей области. |
record_name | Пользовательская или запись %ROWTYPE, ранее объявленная в текущей области. |
record_name.field_name | Поле в пользовательской или %ROWTYPE записи, ранее объявленной в текущей области. |
record_type_name | Пользовательский тип записи, который определяется с помощью спецификатора типа данных RECORD. |
ref_cursor_type_name | Пользовательский тип переменной курсора, определенный с помощью спецификатора типа данных REF CURSOR. |
%ROWTYPE | Представляет запись, которая может содержать строку из таблицы базы данных или курсора. Поля в записи имеют одинаковые имена и типы данных в виде столбцов в строке. |
scalar_datatype_name | Предопределенный скалярный тип данных, такой как BOOLEAN, NUMBER или VARCHAR2. Включает в себя любые квалификаторы для семантики размера, точности или символа в сравнении с байтом. |
%TYPE | Представляет тип данных ранее объявленной коллекции, переменной курсора, полем, объекту, записи, столбцу базы данных или переменной. |
variable_name | Программная переменная. |
Объявления с привязкой
При объявлении переменной тип данных очень часто задается явно:
В Oracle также существует другой метод объявления переменных, называемый объявлением с привязкой (anchored declaration). Он особенно удобен в тех случаях, когда значение переменной присваивается из другого источника данных, например из строки таблицы.
Объявляя «привязанную» переменную, вы устанавливаете ее тип данных на основании типа уже определенной структуры данных. Таковой может являться другая переменная PL/SQL, заранее определенный тип или подтип ( TYPE или SUBTYPE ), таблица базы данных либо конкретный столбец таблицы.
В PL/SQL существует два вида привязки.
- Скалярная привязка. С помощью атрибута %TYPE переменная определяется на основании типа столбца таблицы или другой скалярной переменной PL/SQL.
- Привязка к записи. Используя атрибут %ROWTYPE , можно определить переменную на основе таблицы или заранее определенного явного курсора PL/SQL.
Синтаксис объявления переменной с привязкой:
Здесь имя_переменной — это имя объявляемой переменной, тип_атрибута — либо имя ранее объявленной переменной PL/SQL, либо спецификация столбца таблицы в формате таблица.столбец.
Привязка разрешается на стадии компиляции кода и не приводит к увеличению времени выполнения. Кроме того, привязка устанавливает зависимость между программным кодом и привязываемым элементом (таблицей, курсором или пакетом, содержащим переменную). Это означает, что при изменении данного элемента привязанный к нему программный код помечается как недействительный ( INVALID ). При повторной компиляции привязка выполняется заново, и таким образом код согласуется с измененным элементом.
На рис. 1 показано, как тип данных определяется на основе столбца таблицы базы данных и переменной PL/SQL.
Рис. 1. Атрибут TYPE при объявлении с привязкой
Пример привязки переменной к столбцу таблицы:
Аналогичным образом выполняется привязка к переменной PL/SQL; обычно это делается для того, чтобы избежать избыточных объявлений одного и того же жестко закодированного типа данных. В таких случаях в пакете обычно создается переменная, на которую затем ссылаются в программах с помощью атрибута %TYPE . (Также можно создавать в пакете подтипы SUBTYPE ; эта тема рассматривается далее в этой главе.) В следующем примере приведен фрагмент кода пакета, упрощающего использование Oracle Advanced Queuing (AQ):
Наличие объявлений с привязкой свидетельствует о том, что PL/SQL является не просто процедурным языком программирования, а разработан как расширение языка Oracle SQL. Корпорация Oracle приложила большие усилия к тому, чтобы интегрировать программные конструкции PL/SQL с базами данных, для работы с которыми используется SQL.
Одно из важнейших преимуществ объявлений с привязкой заключается в том, что они позволяют писать очень гибкие приложения, которые легко адаптируются к последующим изменениям структур данных.
Неявные курсоры
В приведенном ниже блоке кода PL/SQL оператор SELECT, например, предусматривает применение неявного курсора:
Базовый блок PL/SQL
Блоком в PL/SQL называется исполняемая программа. Блок кода PL/SQL, независимо от того, инкапсулируется он внутри какой-то программной единицы наподобие процедуры или задается в виде анонимного блока в свободной форме, состоит из следующих структур, которые представляют собой четыре ключевых оператора, только два из которых являются обязательными.
- DECLARE . Этот оператор является необязательным и представляет собой то место, в котором при желании объявляются переменные и курсоры программы.
- BEGIN . Этот оператор является обязательным и указывает, что далее будут идти операторы SQL и PL/SQL, т.е. обозначает начало блока кода PL/SQL.
- EXCEPTION . Этот оператор является необязательным и описывает методы обработки ошибок.
- END . Этот оператор является обязательными и обозначает конец блока кода PL/SQL.
Ниже приведен пример простого блока кода PL/SQL:
Управляющие структуры в PL/SQL
В PL/SQL предлагается несколько видов управляющих структур (control structures), которые позволяют обеспечивать итерацию кода или условное выполнение определенных операторов. Все они кратко описаны в последующих разделах моего блога.
Использование оператора SELECT в PL/SQL
При использовании оператора SELECT в PL/SQL нужно сохранять извлекаемые значения в переменных, как показано ниже:
NOT NULL
Если переменной присваивается значение по умолчанию, вы также можете указать, что переменная всегда должна оставаться определенной (отличной от NULL ). Для этого в объявление включается выражение NOT NULL . Например, следующее объявление инициализирует переменную company_name и указывает, что переменная всегда должна оставаться отличной от NULL :
При попытке выполнения следующей операции в программе будет инициировано исключение VALUE_ERROR :
Кроме того, следующее объявление приводит к ошибке компиляции, так как в объявлении не указано исходное значение:
Объявления с привязкой в PL/SQL
Привязка типа данных означает, что вы указываете компилятору PL/ SQL на необходимость назначения типа данных переменной на основе типа данных уже определенной структуры данных: другой переменной PL/SQL, предопределенного типа или подтипа, таблицы базы данных или какого-то столбца таблицы. PL/SQL поддерживает две разновидности привязки:
Явные курсоры
Явные курсоры создаются разработчиком приложения и облегчают операции с набором строк, которые могут обрабатываться друг за другом. Они применяются всегда, когда известно, что SQL-оператор будет возвращать более одной строки. Обратите внимание, что явный курсор необходимо всегда объявлять в начале блока PL/SQL внутри раздела DECLARE, в отличие от неявного курсора, на который никогда не нужно ссылаться в коде.
После объявления явного курсора он будет проходить через следующие этапы обработки.
- Конструкция OPEN будет определять строки, которые находятся в курсоре, и делать их доступными для программы PL/SQL.
- Команда FETCH будет извлекать данные из курсора в указанную переменную.
- По завершении процесса обработки курсор должен всегда закрываться явным образом.
В листинге А.4 показан пример создания курсора и затем его использования внутри цикла.
Примеры
Рассмотрим несколько примеров, чтобы понять, как использовать Record в Oracle PL/SQL.
Объявление переменных в PL/SQL
В операторе DECLARE можно объявлять как переменные, так и константы. Прежде чем использовать какую-либо переменную ее нужно обязательно объявить. Переменная в PL/SQL может представлять собой как переменную встроенного типа, такого как DATE, NUMBER, VARCHAR2 или CHAR, так и составного вроде VARRAY. Помимо этого, в PL/SQL еще применяются такие типы данных, как BINARY_INTEGER и BOOLEAN.
Ниже приведены некоторые типичные примеры объявления переменной в PL/SQL:
Помимо переменных также можно объявлять и константы, как показано в следующем примере:
Еще можно использовать атрибут %TYPE и с его помощью указывать при объявлении переменной, что ее тип данных должен совпадать с типом данных определенного столбца таблицы:
Посредством атрибута %ROWTYPE можно указывать, что тип данных записи (строки) должен совпадать с типом данных определенной таблицы базы данных. Например, в следующем коде указано, что запись DeptRecord должна содержать все те же столбцы, что и таблица department, а типы данных и длина этих столбцов в ней должны выглядеть абсолютно идентично:
Условное управление
Главной разновидностью условной управляющей структуры в PL/SQL является оператор IF, который обеспечивает условное выполнение операторов. Он может применяться в одной из трех следующих форм: IF-THEN, IF-THEN-ELSE и IF-THEN-ELSEIF. Ниже приведен пример простого оператора IF-THEN-ELSEIF:
Обработка ошибок
В PL/SQL любая ошибка или предупреждение называется исключением (exception). В PL/SQL есть кое-какие определенные внутренне ошибки, но также допускается определять и свои собственные. При возникновении любой ошибки инициируется исключение, и управление переходит в отвечающий за обработку исключений раздел программы PL/SQL. В случае определения своих собственных ошибочных ситуаций необходимо обеспечивать инициирование исключений за счет применения специального оператора RAISE.
Ниже приведен пример использования оператора RAISE для обработки исключений:
Курсорный цикл FOR
Обычно при использовании явных курсоров требуется открывать курсор, извлекать данные и по завершении закрывать курсор. Курсорный цикл FOR позволяет выполнять эти процедуры по открытию, извлечению и закрытию автоматически, чем очень сильно упрощает дело. В листинге А.5 показан пример применения конструкции курсорного цикла FOR.
Примечание
- Для создания Record вы определяете тип записи, а затем объявляете переменную этого типа.
- Вы также можете создать или найти COLUMN, VIEW или CURSOR PL/SQL со значениями, которые вы хотите использовать, и атрибут %ROWTYPE для создания соответствующей Record.
- Вы можете определять типы Record в декларативной части любого блока PL/SQL, подпрограммы или пакета. Когда вы определяете свой собственный тип Record, вы можете указать ограничение NOT NULL для полей или присвоить им значения по умолчанию.
- Тип Record, определенный в спецификации пакета, несовместим с идентично определенным локальным типом Record.
Определение и объявление Record в в Oracle PL/SQL
Атрибут %ROWTYPE позволяет объявить запись, представляющую строку в таблице базы данных, без перечисления всех столбцов. Ваш код продолжает работать даже после добавления столбцов в таблицу. Если вы хотите представить подмножество столбцов в таблице или столбцы из разных таблиц, вы можете определить VIEW или объявить CURSOR для выбора правильных столбцов и любых необходимых объединений, а затем применить атрибут %ROWTYPE к VIEW или CURSOR.
Объявление константы PL/SQL
Между объявлениями переменных и констант существует два различия: объявление константы содержит ключевое слово CONSTANT , и в нем обязательно задается ее значение, которое не может быть изменено впоследствии:
Несколько примеров объявления констант:
Неименованная константа представляет собой литеральное значение — например, 2 или 'Bobby McGee'. Литерал не обладает именем, но имеет тип данных, который не объявляется, а определяется непосредственно на основании значения.
Курсорные переменные
Курсорные переменные указывают на текущую строку в многострочном результирующем наборе. В отличие от обычного курсора, однако, курсорная переменная является динамической, что позволяет присваивать ей новые значения и передавать ее другим процедурами и функциям. Создаются курсорные переменные в PL/SQL следующим образом.
Сначала определяется тип REF CURSOR, как показано ниже:
Затем объявляются сами курсорные переменные типа EmpCurType в анонимном блоке кода PL/SQL либо в процедуре (или функции):
Объявление переменных PL/SQL
При объявлении переменной PL/SQL выделяет память для значения переменной и присваивает этому хранилищу имя, используя которое вы сможете извлекать и изменять данное значение. В объявлении также указывается тип данных переменной, который будет использован для проверки корректности значений, присваиваемых переменной.
Для объявления используется следующая синтаксическая конструкция:
где имя - это имя объявляемой переменной или константы, а тип_данных - это тип или подтип значений, которые могут присваиваться этой переменной. Включение в объявление выражения NOT NULL означает, что если в коде будет предпринята попытка присвоения вашей переменной значения NULL, то Oracle инициирует исключение. Выражение [значение по умолчанию] позволяет инициализировать переменную; оно необязательно для всех объявлений, кроме объявлений констант.
Рассмотрим пример объявления переменных различных типов данных:
Для задания значения по умолчанию ключевое слово DEFAULT и оператор присваивания эквиваленты и взаимозаменяемы. Что же следует использовать? Я предпочитаю использовать оператор присваивания (:=) для указания значений по умолчанию для констант, а ключевое слово DEFAULT - для переменных. Для констант присваиваемое значение в действительности является не значением по умолчанию, а исходным (и неизменным) значением, поэтому использование DEFAULT кажется мне неуместным.
Скалярная привязка
Используйте атрибут %TYPE для определения переменной на основе столбца таблицы или какой-то другой скалярной переменной PL/ SQL.
Использование курсоров
Курсором (cursor) в Oracle называется указатель на область в памяти, в которой содержится результирующий набор SQL-запроса, позволяющий индивидуально обрабатывать содержащиеся в результирующем наборе строки. Курсоры, которые используются Oracle при выполнении DML-операторов, называются неявными, а курсоры, которые создают и используют разработчики приложений — явными.
Синтаксис
Синтаксис определения типа Record и объявления переменной в Oracle PL/SQL:
TYPE type_rec_name IS Record (field_1 datatype,
field_2 datatype,
… field_n datatype);
var_rec type_rec_name;
Привязка к записи
Используйте атрибут %ROWTYPE для определения записи на основе таблицы или предопределенного явного курсора PL/SQL.
Синтаксис объявления типа данных с привязкой будет таким:
где имя_переменной - это имя объявляемой переменной, а атрибут - это имя объявленной ранее переменной PL/SQL или же указание столбца таблицы в формате «таблица.столбец».
Приведем пример привязки переменной к столбцу таблицы базы данных:
Теперь рассмотрим пример привязки записи к курсору:
Ссылка на привязку вычисляется при компиляции, что не увеличивает времени выполнения программы. Привязка устанавливает зависимость между кодом и элементом, к которому выполняется привязка (таблицей, курсором или пакетом, содержащим переменную, на которую ссылается объявление типа). При изменении такого элемента привязанный к нему код помечается как INVALID. При повторной компиляции привязка будет восстановлена, так что код всегда будет соответствовать текущему состоянию элемента.
Прежде чем использовать переменную или константу в программе, ее почти всегда необходимо объявить. Все объявления должны размещаться в разделе объявлений программы PL/SQL. В PL/SQL объявления могут относиться к переменным, константам, TYPE (например, коллекциям или записям) и исключениям. В этой статье рассматриваются объявления переменных и констант.
Пример Record и объявление переменной
В следующем примере Oracle PL/SQL поля инициализированы как скалярные типы данных.
При обращении к переменной или константе, необходимо ее объявить (единственным исключением из этого правила являются индексные переменные циклов FOR.) Все объявления должны быть сделаны в разделе объявлений анонимного блока, процедуры, функции, триггера, тела пакета или тела объектного типа. В PL/SQL вы можете объявить множество типов данных и структур данных, включая переменные, константы, пользовательские типы TYPE (например, для коллекции или записи) и исключения.
Процедуры, функции и пакеты
Процедуры в PL/SQL могут применяться для выполнения различных DML-операций. Ниже приведен пример простой процедуры Oracle:
В отличие от процедур, функции в PL/SQL возвращают значение, как показано в следующем примере:
Пакеты (packages) в Oracle представляют собой объекты, которые обычно состоят из нескольких взаимосвязанных процедур и функций и, как правило, применяются для выполнения какой-нибудь функции приложения путем вызова всех находящихся внутри пакета взаимосвязанных процедур и функций. Пакеты являются чрезвычайно мощным средством, поскольку могут содержать большие объемы функционального кода и многократно выполняться несколькими пользователями.
Каждый пакет обычно состоит из двух частей: спецификации и тела. В спецификации пакета объявляются все входящие в его состав переменные, курсоры и подпрограммы (процедуры и функции), а в теле пакета содержится фактический код этих курсоров и подпрограмм.
В листинге А.6 приведен пример простого пакета Oracle.
При желании использовать пакет emp_pkg для награждения какого-то сотрудника надбавкой к зарплате, все, что потребуется сделать — выполнить следующую команду:
Объявление констант PL/SQL
Существует всего два отличия в объявлениях переменных и констант: объявление константы включает в себя ключевое слово CONSTANT, и в нем обязательно указывается значение по умолчанию (которое на самом деле является не значением по умолчанию, а единственно возможным значением). Синтаксис объявления константы будет таким:
Значение константы задается в момент объявления и впоследствии не может быть изменено.
Рассмотрим несколько примеров объявления констант:
Если не указано иное, то информация, приводимая в последующих разделах главы для переменных, справедлива и для констант.
Записи в PL/SQL
Записи (records) в PL/SQL позволяют воспринимать взаимосвязанные данные как одно целое. Они могут содержать поля, каждое из которых может представлять отдельный элемент. Можно использовать атрибут ROW%TYPE и с его помощью объявлять записью столбцы определенной таблицы, что подразумевает применение таблицы в качестве шаблона курсора, а можно создавать и свои собственные записи. Ниже приведен простой пример записи:
Для ссылки на отдельное поле внутри записи применяется точечное обозначение, как показано ниже:
Конструкции циклов в PL/SQL
Конструкции циклов в PL/SQL позволяют обеспечивать итеративное выполнение кода либо заданное количество раз, либо до тех пор, пока определенное условие не станет истинным или ложным. В следующих подразделах описываются основные виды этих конструкций.
Простой цикл
Конструкция простого цикла подразумевает помещение набора SQL-операторов между ключевыми словами LOOP и END LOOP. Оператор EXIT завершает цикл. Конструкция простого цикла применяется тогда, когда точно неизвестно, сколько раз должен выполняться цикл. В случае ее применения решение о том, когда цикл должен завершаться, принимается на основании содержащейся между операторами LOOP и END LOOP логики.
В следующем примере цикл будет выполняться до тех пор, пока значение quality_grade не достигнет 6:
Еще один простой вид цикла позволяет выполнять конструкция LOOP. EXIT. WHEN, в которой длительность цикла регулируется оператором WHEN. Внутри WHEN указывается условие, и когда это условие становится истинным, цикл завершается. Ниже показан простой пример:
Цикл WHILE
Цикл WHILE указывает, что определенный оператор должен выполняться до тех пор, пока определенное условие остается истинным. Обратите внимание на то, что условие вычисляется за пределами цикла, и вычисляется оно всякий раз, когда выполняются операторы, указанные между операторами LOOP и END LOOP. Когда условие перестает быть истинным, происходит выход из цикла. Ниже приведен пример цикла WHILE:
Цикл FOR
Цикл FOR применяется тогда, когда требуется, чтобы оператор выполнялся определенное количество раз. Он имитирует классический цикл do, который существует в большинстве языков программирования. Ниже приведен пример цикла FOR:
Читайте также: