1.1.2. Определение процедуры

Процедуры в модуле SQL определяются следующими синтаксическими конструкциями:

<procedure> ::=

PROCEDURE <procedure name>

<parameter declaration>...;

<SQL statment>;

<parameter declaration>::=

<parameter name> <data type>

| <SQLCODE parameter>

<SQLCODE parameter> ::= SQLCODE

<SQL statement> ::=

<close statement>

| <commit statement>

| <delete statement positioned>

| <delete statement searched>

| <fetch statement>

| <insert statement>

| <open statement>

| <rollback statement>

| <select statement>

| <update statement positioned>

| <update statement searched>

Имена всех процедур в одном модуле должны быть различны. Любое имя параметра, содержащегося в операторе SQL процедуры, должно быть специфицировано в разделе объявления параметров. Число фактических параметров при вызове процедуры должно совпадать с числом формальных параметров, указанных при ее объявлении. Список формальных параметров каждой процедуры должен содержать ровно один параметр SQLCODE (код ответа процедуры; возможные значения кодов ответа стандартизованы, но некоторые из них определяются в реализации).

1.2. Встроенный SQL

Поскольку в стандарте SQL/89 не специфицированы (даже в приложениях) правила встраивания SQL в язык Си, мы приведем только общие синтаксические правила встраивания, используемые для любого языка. Это поможет оценить "степень стандартности" конкретной реализации.

<embedded SQL statement> ::=

<SQL prefix>

{ <declare cursor>

| <embedded exception declaration>

| <SQL statement>}

 [<SQL terminator>]

<SQL prefix> ::= EXEC SQL

<SQL terminator> ::= END EXEC | ;

<embedded SQL declare section> ::=

<embedded SQL begin declare>

 (<host variable definition>...]

<embedded SQL end declare>

<embedded SQL begin declare> ::=

<SQL prefix> BEGIN DECLARE SECTION [<SQL terminator>]

<embedded SQL end declare> ::=

<SQL prefix> END DECLARE SECTION [<SQL terminator>]

<embedded variable name> ::= :<host identifier>

<embedded exception declaration> ::=

WHENEVER <condition> <exception action>

<condition> ::= SQLERROR | NOT FOUND

<exception action> ::= CONTINUE | <go to>

<go to> ::= { GOTO | GO TO } <target>

<target> ::= :<host identifier> | <unsigned integer>

Встраиваемые операторы SQL, включая объявления курсора, а также разделы объявления исключительных ситуаций и переменных основной программы, должны быть окружены скобками EXEC SQL и END EXEC. Объявление курсора должно встречаться текстуально раньше любого оператора, ссылающегося на этот курсор. Все переменные основной программы, используемые во встроенных операторах SQL, должны быть объявлены в текстуально предшествующем этому оператору разделе объявления переменных основной программы. При этом синтаксис объявления переменной соответствует синтаксису основного языка программирования, но имени переменной предшествует двоеточие.

Механизм обработки исключительных ситуаций в SQL/89 исключительно прост (можно сказать, примитивен). Можно задавать реакцию на возникновение двух видов условий: SQLERROR - это условие появления в переменной SQLCODE после выполнения встроенного оператора отрицательного значения; NOT FOUND - условие появления в SQLCODE значения +100 (этот код означает исчерпание курсора). Реакция может состоять в выполнении безусловного перехода на метку основной программы (действие GO TO), или отсутствовать (действие CONTINUE). Срабатывает тот оператор определения реакции на исключительную ситуацию, который текстуально ближе от начала программы к данному оператору SQL.

Заметим, что во многих реализациях поддерживается два вида кодов ответа при выполнении операторов SQL (встроенных или взятых из модуля): через переменную SQLCODE с кодами ответа, представляемыми целыми числами и через переменную SQLSTATE с кодами ответа, кодируемыми десятичными числами, представленными в текстовой форме. Имеется тенденция к переходу на использование только механизма SQLSTATE, но в стандартных реализациях должен поддерживаться механизм SQLCODE.

2. Набор операторов манипулирования данными

В стандарте SQL/89 определен очень ограниченный набор операторов манипулирования данными. Их можно классифицировать на группы операторов, связанных с курсором; одиночных операторов манипулирования данными; и операторов завершения транзакции. Все эти операторы можно использовать как в модулях SQL, так и во встроенном SQL. Заметим, что в SQL/89 не определен набор операторов интерактивного SQL.


Информация о работе «Использование SQL в прикладном программировании»
Раздел: Информатика, программирование
Количество знаков с пробелами: 28917
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
183471
45
12

... Java, JavaScript и встроенные в сервер средства LiveConnect. Более мощными реляционными возможностями доступа к базе данных и более эффективным выполнением виртуальной Java-машины будут расширены услуги разработки приложений, обеспечиваемых в Enterprise Server 2.0,. Сервис управления. В дополнение к использованию встроенной машины каталога LDAP Enterprise Server 2.0 будет управляем через общие ...

Скачать
46976
0
2

... между ними, заключается в способе формирования запросов: язык QBE предполагает ручное или визуальное формирование запроса, в то время как использование SQL означает программирование запроса. 2. РАЗРАБОТКА ПРИЛОЖЕНИЙ АРХИТЕКТУРЫ КЛИЕНТ-СЕРВЕР ПРИ ПОМОЩИ SQL SQL - это язык манипулирования данными, который работает в одно- или многопользовательской системе. Особенно хорошо SQL работает в ...

Скачать
71998
10
0

... правил, предотвращающих создание операторов SQL, которые выглядят как абсолютно правильные, но не имеют смысла. Несмотря на не совсем точное название, SQL на сегодняшний день является единственным стандартным языком для работы с реляционными базами данных. SQL — это достаточно мощный и в то же время относительно легкий для изучения язык. Роль SQL Сам по себе SQL не является ни системой ...

Скачать
126025
4
0

... между SQL Server и остальной системой на выделенном компьютере. SQL Server использует память в количестве, отведенном ему настраиваемым параметром "memory". Machine Memory, (MB) SQL Server Memory, (MB) 16 24 32 48 64 128 256 512 4 6 16 28 40 100 216 464 Не следует выделять SQL Server слишком много памяти (относительно общего объема памяти ...

0 комментариев


Наверх