8db088aadb8cef0b75eb774dcc4d3cf5.ppt
- Количество слайдов: 152
Программирование в среде СУБД (на примере СУБД Informix) 1
Темы занятий: • Основы баз данных; • Языковые средства создания базы данных и манипулирования данными; • Основы разработки прикладных программ. 2
СУБД выполняет три группы функций: • управление; • обработка; • сервис. 3
Языковые средства: • • • язык описания данных; язык манипулирования данными; языки программирования; редакторы; отладчики. 4
Средства управления процессами • • • обслуживание задач; поддержка запросов; ввод и корректировка данных; взаимодействие с операционной системой; права доступа. 5
Два режима для подготовки программ: • интерпретации (программа обрабатывается и выполняется последовательно с синтаксическим анализом, преобразованием и немедленным выполнением каждого оператора в виде сгенерированных машинных команд); • компиляции (компилятор производит синтаксический контроль всей программы, генерацию объектного модуля и редактирование связей объектных модулей, создание исполняемой программы). 6
Архитектуры баз данных: • На основе файлового сервера; • Хост-терминал; • Клиент – сервер. 7
Модели данных: • • Иерархическая (древовидная); Сетевая; Реляционная; Объектно-реляционная. 8
Ключ и ключевые атрибуты Ключ – набор атрибутов, который позволяет идентифицировать запись внутри таблицы, при этом никакие подмножества этих атрибутов не будут ключом. Простой ключ состоит из одного атрибута, составной ключ – из двух и более. Атрибут, входящий в тот или иной ключ, называется ключевым атрибутом. Атрибут, который не входит ни в один из ключей, называется неключевым атрибутом. Некоторый ключ, который разработчики или проектировщики БД выделяют, называется первичным. Первичным может считаться любой ключ. 9
Нормализация • Первая нормальная форма – значения атрибутов являются простыми, неделимыми. Это – условие реляционной СУБД. • Вторая нормальная форма – каждый неключевой атрибут полностью зависит от любого возможного ключа целиком, а не от его подмножества. • Третья нормальная форма – атрибуты зависят только от ключей. Третья нормальная форма запрещает неключевому полю зависеть от другого неключевого поля. 10
Язык SQL (Structured Query Language) – язык реляционной базы данных, включающий средства: • определения данных; • манипулирования данными; • контроль данных. 11
Язык SQL поддерживает дескриптивный принцип, т. е. пользователь указывает то, что он хочет иметь, а не то, как это можно получить. 12
Типы данных: • INTEGER и SMALLINT - целое и короткое целое, используют 4 и 2 байта, следовательно, диапазон от – 2147483647 до 2147483647 и – 32767 до 32767. Недостаток – ограниченный набор значений. • SERIAL (счетчик) основан на типе INTEGER, предназначен для создания и хранения уникального искусственного ключа для записи в таблице. 13
Типы данных (продолжение): • FLOAT и SMALLFLOAT – типы для представления нецелых чисел. Занимают 8 и 4 байта соответственно. Внутреннее представление состоит из мантиссы и порядка. Точность 16 и 8 цифр соответственно. • DECIMAL(p) аналогичен FLOAT, предназначен для хранения данных с фиксированным числом значащих цифр, число которых от 1 до 32. Для хранения используется двоичное представление, число байт равно 1+p/2. 14
Типы данных (продолжение): • DECIMAL(p, n) – предназначен для хранения данных не только с фиксированным числом значащих цифр, но и с фиксированным числом значащих цифр после запятой. p – общее число цифр, n – число цифр после запятой. Размер памяти – 1+p/2. • MONEY(p, n) – предназначен для хранения денежной единицы, аналогичен DECIMAL(p, n). В языке 4 GL на основе внешней переменной формируется обозначение денежной единицы ($, DM, руб. ). 15
Типы данных (продолжение): • DATE – предназначен для хранения дат, хранит число дней, прошедших с 31 декабря 1899 г. , использует для этого 4 байта. Диапазон значений – 58 столетий вперед и назад. Формат представления зависит от внешней переменной и/или от параметра, указанного с ключевым словом using. 16
Типы данных (продолжение): • DATETIME – предназначен для хранения точных моментов времени. Тип DATETIME содержит информацию о годе (YEAR), месяце (MONTH), дне (DAY), часе (HOUR), минуте (MINUTE), секунде (SECOND) и долях секунды (FRACTION). Можно выбрать нужный диапазон точности, например, точность до секунды в течение дня – DATETIME HOUR TO SECOND, до минуты в произвольном году – DATETIME YEAR TO MINUTE. 17
Типы данных (продолжение): • INTERVAL – предназначен для хранения временных интервалов. INTERVAL – разность дат, диапазон значений задается как в DATETIME. • CHAR и CHAR(n) – предназначен для хранения символьных строк фиксированной длины. CHAR = CHAR(1). Максимальная длина – 32511. Для хранения данных всегда отводится n байтов, независимо от реальной длины строки. 18
Типы данных (продолжение): • VARCHAR(m) - короткая символьная строка (до 255 символов) переменной длины. Параметр m задает максимальную длину, но не более 255. Для хранения значений используется столько байт, сколько содержит строка + 1 служебный. По сравнению с CHAR(n) занимает меньше места, но замедление при операциях модификации. 19
Типы данных (продолжение): • TEXT – предназначен для хранения символьных строк произвольной переменной длины. Не имеет практически ограничений на длину. Аналогичен типу VARCHAR(m). • BYTE – предназначен для хранения двоичных объектов произвольной длины (картинки, звук и т. д. ). 20
Создание, закрытие и удаление базы данных 21
Операторы создания, удаления и закрытия базы данных: CREATE DATEBASE DATABASE <имя базы> DROP DATABASE CLOSE <имя базы> DATABASE <имя базы> 22
Создание, изменение и удаление таблицы 23
Оператор создания таблицы: CREATE TABLE <имя таблицы> ( <имя поля> <тип поля> [NOT NULL], <имя поля> <тип поля> [NOT NULL] [, …] ) NOT NULL означает, что поле должно иметь какое-то конкретное значение. 24
Оператор удаления таблицы похож на оператор удаления базы данных: DROP TABLE <имя таблицы> 25
Операторы модификации таблицы: Добавление новых полей: ALTER TABLE <имя таблицы> ADD (<имя поля> <тип поля> [NOT NULL] [, …]) Удаление ненужных полей: ALTER TABLE <имя таблицы> DROP (<имя поля> [, …]) Модификация поля: ALTER TABLE <имя таблицы> MODIFY (<имя поля> <тип поля> [NOT NULL] [, …] ) 26
Операторы манипулирования данными: • • INSERT – вставка; DELETE – удаление; UPDATE – модификация; SELECT- выбор. 27
Оператор INSERT вставляет в таблицу новую запись: INSERT INTO <имя таблицы>(<поле 1>, <поле 2>, …) VALUES (<значение 1>, <значение 2>, …) 28
Для модификации записей используется оператор UPDATE: UPDATE <имя таблицы> SET <имя поля>=<значение> [, …] [WHERE <условие>] UPDATE <имя таблицы> SET (<имя поля 1>, <имя поля 2, …) = (<значение 1>, <значение 2>, …) 29 [WHERE <условие>]
Для удаления ненужных записей в таблице используется оператор DELETE: DELETE FROM <имя таблицы> [WHERE <условие>] 30
Для выборки из таблицы используется оператор SELECT: SELECT <имя поля> [, …] <имя таблицы> [WHERE <условие>] FROM 31
Агрегатные функции позволяют производить вычисления над совокупностью одних и тех же полей сразу в нескольких записях выборки. • AVG(<имя поля>) – среднее всем по значениям данного поля; • COUNT(*) - количество записей; • MAX(<имя поля >) - максимум из всех значений данного поля; • MIN(<имя поля >) - минимум из всех значений данного поля; • SUM(<имя поля > - сумма всех значений данного 32 поля.
Пример использования агрегатной функции с ключевыми словами GROUP BY и HAVING SELECT name, COUNT(*), MAX(price) FROM items GROUP BY name HAVING COUNT(*) > 1 33
Управление транзакциями Транзакция – последовательность действий, которая должна быть выполнена целиком или не должно быть выполнено ни одно действие из нее (все или ничего). 34
Операторы управления транзакциями: • BEGIN WORK • - начать транзакцию; 35
Создание базы данных с транзакциями: CREATE DATABASE <имя базы> WITH LOG 36
Создание базы данных с транзакциями в режиме ANSI: CREATE WITH DATABASE <имя базы> LOG MODE ANSI 37
Дополнительные возможности оператора выбора • • • Поиск по нескольким таблицам; Устранение повторяющихся данных; Вычисления внутри оператора select; Слияние двух выборок; Сортировка выборки; Вставка в таблицу нескольких строк одновременно; • Временная таблица. 38
Программирование сервера базы данных • Динамический SQL; • Хранимые процедуры; • Триггеры. 39
Для работы с динамическим запросом SQL имеются следующие операторы: PREPARE <имя оператора > <текстовая строка> FROM EXECUTE <имя оператора> FREE <имя оператора> 40
Если в момент подготовки SQL-оператора не все конкретные значения известны, то эти значения следует подставить во время выполнения, именно это средство делает запрос динамическим. Параметры, значения которых будут определяться во время выполнения приложения, задаются символом «? » . Для задания фактических параметров в оператор EXECUTE следует добавить раздел USING, а для приема результата выполнения – раздел INTO. 41
Пример. PREPARE fam WHERE op_sql 1 FROM spisok group = ? ” EXECUTE INTO op_sql 1 familia USING “SELECT “ 101” 42
Операторы создания и удаления триггера: CREATE TRIGGER <действие> DROP <имя> <событие> TRIGGER <имя> 43
Синтаксис на событие при создании триггера: INSERT ON <имя таблицы> DELETE ON <имя таблицы> UPDATE ON <имя таблицы> 44
Действие триггера состоит из трех разделов: • операторы, выполняемые до исполнения оператора, запустившего триггер (раздел BEFORE); • для каждой строки (раздел FOR EACH ROW); • после выполнения оператора (AFTER). 45
При создании триггера следует указать хотя бы один раздел. CREATE TRIGGER … ON … BEFORE <операторы> FOR EACH ROW <операторы> AFTER <операторы> 46
Операторами в триггере могут быть 4 типа SQL-операторов: • • вставки (INSERT); удаления (DELETE); модификации (UPDATE); выполнения хранимой процедуры (EXECUTE PROCEDURE). 47
Примеры: CREATE TRIGGET trig 1 DELETE ON persons AFTER (UPDATE tab 2 SET x = x+1, UPDATE tab 3 SET y = y-1) CREATE TRIGGER trig 2 UPDATE OF name ON companies FOR EACH ROW (EXECUTE PROCEDURE proc 1) AFTER (EXECUTE PROCEDURE proc 2) 48
Три типа ограничений целостности: Семантическая целостность связана с типами данных и конкретными значениями полей. Объектная целостность связана с использованием первичных ключей для идентификации записи. Ссылочная целостность обеспечивает связь записей одной таблицы с записями другой таблицы. 49
Типы ограничителей: • • значения по умолчанию; ограничители на значение; ограничители на уникальность; ссылочные ограничители. 50
Ссылочный ограничитель состоит из двух частей: • указание первичного ключа (PRIMARY KEY) в главной таблице; • ссылка на первичный ключ (REFERENCES) в подчиненной таблице. 51
Пример. CREATE TABLE <имя таблицы> (… <имя поля> <тип поля> [NOT NULL] [<значение по умолчанию>] PRIMARY KEY, …, <имя поля> <тип поля> [NOT NULL] [<значение по умолчанию>] REFERENCES <имя таблицы> (<имя поля>) …) 52
Разграничения прав пользователей на уровне базы данных: • на доступ (CONNECT); • на управление ресурсами (RESOURCE); • на администрирование (DBA). 53
Права на доступ: • выполнение операторов SELECT, INSERT, DELETE, UPDATE, если ему это позволено на уровне объекта (таблицы); • выполнение хранимых процедур; • создание псевдотаблицы (VIEW) для таблиц, доступ к которым разрешен; • создание синонимов; • создание временных таблиц и индексов в них. 54
Права на управление ресурсами • права на доступ (CONNECT); • создание новых объектов (таблицы, триггера, индекса и т. д. ); • изменение или удаление собственных объектов; • управление правами доступа для других пользователей к объектам, для которых данный пользователь является владельцем. 55
Право на администрирование: • управление ресурсами (RESOURCE); • удаление (DROP DATABASE), старт, останов и восстановление базы данных; • удаление любых объектов вне зависимости от того, кто ими владеет; • раздача и изменение прав доступа другим пользователям к базе данных в целом и к отдельным объектам. 56
Команды управления правами доступа: Предоставление прав: GRANT <тип права на базы данных> <имя пользователя> TO Отбирание прав: REVOKE <тип права на базу данных> <имя пользователя> FROM 57
Права на таблицу: • SELECT - получение информации из таблицы, при необходимости можно указать поля; • INSERT - право на вставка в таблицу; • UPDATE - право на модификация данных; • DELETE - право на удаление записей из таблицы; • INDEX - право на создание индексов для данной таблицы. Нужно право на управление ресурсами на уровне всей БД; 58
Права на таблицу (продолжение) • REFERENCES право на задание ссылочных ограничений для данной таблицы. Для этого надо указать поля, которые разрешено использовать в ограничителях; • ALL все перечисленные права на таблицу. 59
Синтаксис оператора передачи права на таблицу: GRANT <тип права на таблицу> ON <имя таблицы> TO <имя пользователя> GRANT < тип права на таблицу > (<имя поля 1>, <имя 2>, …) ON <имя таблицы> TO <имя пользователя > WITH GRANT OPTION 60
Права на хранимые процедуры: GRANT EXECUTE ON <имя процедуры> TO <имя пользователя> GRANT EXECUTE ON <имя процедуры> TO <имя пользователя> WITH GRANT OPTION REVOKE EXECUTE ON <имя процедуры> FROM <имя пользователя> 61
Управление одновременным доступом к данным Открытие базы только для себя: DATABASE <имя базы> EXCLUSIVE 62
Блокирование таблицы • Оператор установки разделяемой блокировки: LOCK TABLE <имя таблицы> IN SHARE MODE • Оператор установки эксклюзивной блокировки: LOCK TABLE <имя таблицы> IN EXCLUSIVE MODE • Снятие блокировки: UNLOCK TABLE <имя таблицы> 63
Уровни изоляции: • грязное чтение (DIRTY READ); • достоверное чтение (COMMTTTED READ); • стабильный курсор (CURSOR STABILITY); • многократное чтение (REPETABLE READ). 64
Оператор установки уровня изоляции: SET ISOLATION TO <уровень изоляции> 65
Повышение скорости обработки запросов: • • Индексы; Буферизация журнала транзакций; Блокировка на уровне записей и страниц; Эффективное построение запросов – уменьшение числа таблиц в одном запросе; • Сортировка и поиск по коротким полям; • Классификаторы. 66
Создание приложений: 1) проектирование программы: 2) создание текстового файла для каждой экранной формы в программе; 3) компиляция форм и исправление ошибок; 4) создание текстового файла для каждого модуля исходного кода в программе; 5) компиляция каждого модуля и исправление ошибок; 6) связывание модулей в программу; 7) отладка и исправление синтаксиса и логики. 67
Базовые возможности языка Язык 4 GL - 4 -го поколения, включает стандартные операторы SQL для доступа к реляционной БД и операторы для обработки хранящихся в памяти переменных. 68
Основные средства интерфейса с пользователем: • окна; • формы; • меню. 69
Второстепенные средства: • подсказки; • сообщения об ошибках. 70
Окно – это именованная прямоугольная область на экране. Окно может быть открытым и закрытым. Окно, открытое последним, становится активным. Активным можно сделать любое открытое окно. 71
Форма – это набор меток и полей ввода, в которые пользователь может вводить или редактировать информацию, хранимую в памяти в программных переменных. Форма – стандартное средство подготовки информации для ввода в БД. 72
Меню – это предоставление пользователю возможности выбора действия. В 4 GL используются кольцевые меню, состоящие из 2 -х строк: 1) строка меню, отображающая заголовок и пункты меню; 2) строка помощи, описывающая выбранный пункт более подробно. 73
Программный блок – набор операторов, реализованных в виде отдельных единиц. В программе INFORMIX-4 GL могут присутствовать 3 типа программных блоков: • MAIN; • FUNCTION; • REPORT. 74
Конструкции блоков FUNCTION и REPORT: FUNCTION <имя функции>. . END FUNCTION REPORT <имя отчета>. . END REPORT 75
Определения и объявления: • • FUNCTION MAIN REPORT DEFINE 76
Управление потоком: CALL CASE CONTINUE END EXIT FINISH REPORT FOREACH GOTO ----77
Управление потоком (продолжение): IF LABEL ----OUTPUT TO REPORT RETURN RUN START REPORT WHILE 78
Директивы компилятора 4 GL: DATABASE DEFER GLOBALS WHENEVER 79
Управление памятью: INITIALIZE LET LOCATE VALIDATE 80
Конструкции языка для организации экранного ввода-вывода: CLEAR CLOSE FORM CLOSE WINDOW CONSTRUCT CURRENT WINDOW DISPLAY ARRAY 81
Конструкции языка для организации экранного ввода-вывода (продолжение): DISPLAY FORM ERROR INPUT ARRAY MENU MESSAGE 82
Конструкции языка для организации экранного ввода-вывода (продолжение): OPEN FORM OPEN WINDOW OPTIONS PROMPT SCROLL SLEEP 83
Конструкции языка, связанные с БД: все операторы SQL. Конструкции языка для обработки ошибок. 84
Структура программы Программа компилируется из одного или нескольких модулей исходного кода: 85
[DATABASE <имя базы данных> ] [GLOBALS -- одно на модуль <определение глобальных переменных> END GLOBALS ] Или [GLOBALS “<имя файла, содержащего определения глобальных переменных>”] 86
MAIN <определение локальных переменных> <операторы 4 GL> <вызовы функций> <определения базы данных> END MAIN 87
FUNCTION <имя функции> (<параметры>) <определение локальных переменных> <операторы 4 GL> <вызовы функций> <определение базы данных> [RETURN <возвращаемые значения>] END FUNCTION 88
REPORT <имя отчета> (<параметры>) <определение локальных переменных> <операторы 4 GL> <операторы отчета> <вызовы функций> END REPORT 89
Оператор DATABASE выполняет 2 функции: • сообщает компилятору имя базы данных, используемой для определения переменных like имя поля таблицы; • обеспечивает подключение к указанной БД при выполнении. 90
Последовательность управления отчетом: операторов START REPORT <имя отчета> TO {[<имя файла>] [PRINTER] [PIPE <имя программы>]} OUTPUT TO REPORT <имя отчета>(<параметры>) FINISH REPOT <имя отчета> 91
Дополнительный тип данных - запись: RECORD {[like <имя таблицы>. *] 92
Дополнительный тип данных - область: ARRAY “[“ <целочисл. счетчик> [, < целочисл. счетчик > [, <целочисл. счетчик >]]”]” OF <тип данных, не являющийся массивом> 93
Переменные всех типов объявляются с помощью оператора DEFINE: DEFINE <имя переменной> {[<тип данных>, … [like <имя таблицы>. <имя поля>]} 94
Если таблица находится на удаленном сервере, полный синтаксис следующий: DEFINE <имя переменной> LIKE <имя БД>@<имя сервера БД>: <имя таблицы>. <имя поля> 95
Операторы SQL, поддерживаемые в INFORMIX-4 GL: • математические операторы: + - * / • операторы отношения: < <= > >= <> != [not] between • логические операторы: not and or • строковые операторы: || matches like • операторы на множествах: [not] in [not] exists all any some • NULL-операторы: is [not] null 96
Дополнительные операторы INFORMIX-4 GL: • ** (экспонента) • mod(остаток деления) • , • clipped • using 97
Преобразование даты с помощью конструкции USING: • • • dd - день месяца от 1 до 31 ddd - день недели: Sun, Mon, . . mm - месяц года от 1 до 12 mmm - название месяца: Jan, Feb, … yy - год с двумя значащими цифрами yyyy - год с четырьмя значащими цифрами 98
Преобразование чисел с помощью конструкции USING: • • # - число или пробел & - число или ноль * - число или звездочка < - выравнивание влево и удаление конечных пробелов • , - отображает запятую, если имеется число слева 99 • . - отображает точку
Преобразование чисел с помощью конструкции USING (продолжение): • - - отображает минус, если значение отрицательно • + - отображает плюс или минус для значения • () - отображает круглые скобки, если значение отрицательно • $ - отображает знак доллара 100
Базовые операторы языка программирования 101
Присваивание let <имя переменной> = <выражение> 102
Отображение на экране (не связанное с полями экранной формы): display <имя переменной> [, …] [at <строка>, <столбец> [attribute (<атрибут> [, …])]] 103
Прием ответа пользователя вне экранной формы: prompt {<имя переменной> | <строка> } [ , …] [ attribute (<атрибут>) [, …] ) ] for [ char ] <имя переменной> [ help <номер справки> ] [attribute (<атрибут> [, …])] [ on key (<клавиша> [, …]) операторы4 GL>} end prompt 104
Отображение ошибки и выдача звукового сигнала: error { <имя переменной> | <строка> } [, …] [attribute ( <атрибут> [, …])] 105
Отображение сообщения или предупреждения: message { <имя переменной> | <строка> } [, …] [attribute ( <атрибут> [, …])] 106
Синтаксис оператора if: if <логическое выражение> then <операторы 4 GL> else <операторы 4 GL> end if 107
Синтаксис оператора case: case [ ( <выражение> ) ] when <выражение> { <операторы 4 GL> | exit case } [, …] [ … ] [ otherwise { <операторы 4 GL> | exit case } [, …] ] end case 108
Синтаксис оператора цикла for со счетчиком: for <переменная типа integer> = <начальное целочисленное выражение> to <конечное целочисленное выражение> [ step <целочисленное приращение> ] { <операторы 4 GL> | continue for | exit for } end for 109
Синтаксис оператора while с условием: while <логическое выражение> { <операторы 4 GL> | continue while | exit while } end while 110
Внешние системные переменные: • int_flag принимает значение true, если пользователь нажал клавишу прерывания, по умолчанию - Delete. Клавиша прерывания может быть переопределена оператором options; • quit_flag принимает значение true, если пользователь нажал клавишу выхода, по умолчанию - Ctrl. 111
Три внешние системные константы: • false с целочисленным значением ноль; • true с целочисленным значением один; • notfound со значением 100. 112
Причина ошибки и ее расположение в исходном модуле заносится в файл регистрации ошибок в виде четырех строк: • • дата и время выполнения программы; расположение ошибки в исходном коде; код ошибки; описание ошибки. 113
options { comment line < номер строки окна (last – 1 )> error line < номер строки окна (last)> form line < номер строки окна (first + 2)> message line < номер строки окна (first + 1)> menu line < номер строки окна (first)> prompt line < номер строки окна (first)> accept key <наименование клавиши (escape)> delete key < наименование клавиши (F 2)> help key < наименование клавиши (control-w)> insert key < наименование клавиши (F 1)> next key < наименование клавиши (F 3)> previous key < наименование клавиши (F 4)> help file <имя файла справки> display attribute (<атрибут (normal)> [, …]) input { wrap | no wrap (no wrap) } field order { constrained | unconstrained (constrained)} SQL interrupt { on | off (off)} 114
options { comment line < номер строки окна (last – 1 )> error line < номер строки окна (last)> form line < номер строки окна (first + 2)> message line < номер строки окна (first + 1)> menu line < номер строки окна (first)> prompt line < номер строки окна (first)> accept key <наименование клавиши (esc)> 115
help key < наименование клавиши (control-w)> insert key < наименование клавиши (F 1)> next key < наименование клавиши (F 3)> previous key < наименование клавиши (F 4)> help file <имя файла справки> display attribute (<атрибут (normal)> [, …]) input { wrap | no wrap (no wrap) } 116
field order { constrained | unconstrained (constrained)} SQL interrupt { on | off (off)} 117
Синтаксис блока операторов menu: menu <имя меню> { [before menu ] | command ( [ key ( <командная клавиша> [, …] ) ] [ <имя команды> ] [ “<описание>” ] [ help <номер пункта в файле справки> ] } { [hide option [ all | <имя команды> [, …] ] | [show option [all | <имя команды> [, …] [ | [next option <имя команды> ] | [continue menu ] | [exit menu] } end menu 118
Блок операторов меню содержит два типа конструкций: • before menu используется для выполнения набора операторов до и во время активизации меню, перед тем, как пользователь выберет пункт меню; • command используется для определения пунктов меню, которые пользователь может выбрать. 119
Любая конструкция может содержать пять подконструкций: • hide option используется, чтобы деактивировать пункты меню и сделать их недоступными и невидимыми; • show option противоположна hide option; • next option указывает следующий пункт меню после данного; • continue menu передает управление оператору menu, чтобы пользователь мог сделать выбор; • exit menu передает управление оператору, находящемуся после конца блока menu (end menu). 120
Структура файла справки следующая: # <комментарий>. <номер пункта в файле справки> <описание> […] 121
Созданный текстовый файл справки компилируется по команде mkmessage: mkmessage <имя текстового файла справки> <имя исполняемого файла справки> 122
Операторы для работы с экранными формами: open form <имя формы> from “имя файла>” display form <имя формы> [ attribute (<атрибут> [, …] ) ] close form <имя формы> 123
Управление окном open window <имя окна> at строка>, <колонка> with { <число строк> rows, <число колонок> columns | form “<имя файла 124
Шаги создания курсора: • 1. Формирование условия where в запросе с помощью оператора construct. • 2. Формирование завершенного оператора SQL с использованием конструкции where из шага 1, обычно с операторами let и concatenate и ключевым словом clipped. • 3. Подготовка оператора SQL с помощью команды prepare. • 4. Если оператор SQL из другой версии 4 GL, то он выполняется по команде execute. 125
Шаги создания курсора (продолжение): • 5. Если запрос может возвратить более, чем одну запись, то курсор объявляется для последовательного выбора строк с помощью команды declare. • 6. Выбор строки одним из двух способов: а) явно открыть курсор командой open и выбирать записи командой fetch, пока не закончится выбор, а затем закрыть курсор командой close и освободить ресурсы системы командой free; б) инициализировать цикл foreach, который автоматически выполняет все функции, необходимые для выбора. 126
Шаги создания курсора (продолжение): • 7. Если данные находятся в программных переменных или программных массивах, то для их вывода применяются следующие команды: • а) display для форматирования и отображения в экранной форме; • б) display array для отображения нескольких строк одновременно; • в) output to report для вывода данных в отчет. 127
Шаги создания курсора (продолжение): • 8. Для изменения данных, отображаемых на экране, или для добавления новой информации используются команды: • а) input для редактирования и проверки данных; • б) input array для редактирования и проверки массива данных. 128
Оператор construct: { construct by name <строка условия where> on <имя таблицы>. * | construct <строка условия where> on <имя таблицы>. <имя поля> [, …] from <имя поля> [, …] | construct <строка условия where> on <имя таблицы>. <имя поля> [, …] from <экранная запись>. * | construct <строка условия where> on <имя таблицы>. <имя поля> [, …] from < экранная запись >. <имя поля> [, …] } attribute (<атрибут> [, …]) { before construct { <операторы 4 GL> } after field <имя поля> { <операторы 4 GL> } on key <специальная клавиша> { <операторы 4 GL> } continue construct exit construct } end construct 129
{ construct by name <строка условия where> on <имя таблицы>. * | construct <строка условия where> on <имя таблицы>. <имя поля> [, …] from <имя поля> [, …] | construct <строка условия where> on <имя таблицы>. <имя поля> [, …] from <экранная запись>. * | construct <строка условия where> on <имя таблицы>. <имя поля> [, …] from < экранная запись >. <имя поля> [, …] } attribute (<атрибут> [, …]) 130
{ before construct { <операторы 4 GL> } after field <имя поля> { <операторы 4 GL> } on key <специальная клавиша> { <операторы 4 GL> } continue construct exit construct } end construct 131
Формирование оператора select: let <строка оператора SQL> = “select * from <имя таблицы> where “, <строка условия where> clipped, “ ”, ”order by <имя поля>” 132
Оператор prepare применяется для лексического анализа и проверки динамического оператора SQL: prepare <идентификатор оператора> from { <строка оператора SQL> | <символьная переменная> } 133
После подготовки оператора необходимо объявить курсор: declare <имя курсора> [ scroll ] cursor [ with hold ] for{ <оператор select> [ for update [ of <имя поля> [, …] ] ] | <оператор insert> | <идентификатор оператора SQL> } 134
Использование курсора: • open <имя курсора> [ using <программная переменная> [, …] ] • fetch {next | previous | prior | first | last | current | relative <относительный номер строки> | absolute <абсолютный номер строки>} <имя курсора> [ into <программная переменная> [, …] ] • close <имя курсора> • free { < имя курсора > | <идентификатор оператора SQL> } 135
Для последовательной выборки записей вместо совокупности операторов open, fetch и close можно использовать оператор foreach: foreach <имя курсора> [into <имя программного массива> [, …]] ( <операторы 4 GL> | continue foreach | exit foreach) end foreach 136
Отображение программных переменных на экране: display { by name <имя переменной> [, …] } [ attribute ( <атрибут> [, …] ) ] | <константа> [, …] | <имя переменной> [, …] [ { to <имя поля формы> [, …] } | <экранная запись>[“[“<номер строки>”]”]. * at <строка>. столбец> } [ attribute ( <атрибут> [, …]) ] ] 137
input { by name <программная переменная> [, …] [without defaults ] from { <имя поля формы> } [, … ] | экранная запись>. *[ attribute ( <атрибут> [, …] ) ] before input (операторы 4 GL) before field <имя поля формы> (операторы 4 GL) after field <имя поля формы> (операторы 4 GL) after input (операторы 4 GL) on key (<специальная клавиша>) (операторы 4 GL) next field { next | previous | < имя поля формы > } continue input exit input end input 138
Масштаб – окно, содержащее форму, которая позволяет выполнить запрос по образцу, просматривать список выбранных строк, выбрать одну строку для возврата вызывающей программе ключевого значения и для записи этой информации в программную переменную, соответствующую позиции на экране. 139
Броузер - окно, содержащее форму, которая позволяет просматривать список строк, удовлетворяющих запросу выбора в главном окне прикладной программы. 140
Вывод программного массива на экран по оператору display array: display array <имя программного массива> to <имя экранного массива>. * [ attribute (<атрибут> [, …])] {[on key <специальная клавиша> [, …] <операторы 4 GL> exit display end display } 141
Процесс загрузки массива и вывода его на экран состоит из следующих шагов: 1. открытие окна броузера с его экранной формой; 2. вывод на экран инструкции для перемещения по экранному массиву; 3. загрузка программного массива данными из таблиц с использованием курсора (подготовка экранного массива); 142
Процесс загрузки массива и вывода его на экран состоит из следующих шагов (продолжение): 4. установка счетчика массива; 5. закрытие и освобождение курсора броузера; 6. отображение программного массива на экране; 7. закрытие окна после выхода. 143
Виды отчетов, отображающих информацию: • последовательные одномерные списки строк однородного содержания с логическими группировками; • последовательные распечатки блоков разнородных строк отчетов и отчетов, содержащих несколько разделов; • двумерные отчеты, подобные матрице, электронные таблицы. 144
Драйвер – часть кода, входящая в функцию, расположен отдельно от форматтера, блок операторов следующий: 145
Структура и синтаксис форматтера: report <имя отчета> ( <параметры> ) <определение параметров> <определение локальных параметров> output top margin 3 left margin 5 right margin 132 bottom margin 3 page length 66 report to screen order [ external] by <переменная> [, …] format <управляющие блоки> <операторы форматирования> end report 146
Отслеживание ошибок: whenever { { } [any ] error sqlerror warning sqlwarning not found } call <имя функции> continue stop 147
Работа со многими базами данных в одной программе define p_remote record like <База_данных>@<Удаленный_сервер>: <Таблица>. * declare c_cursor for “select * from <База_данных>@<Удаленный_сервер>: <Таблица> … 148
Средства взаимодействия среды Unix и программы на 4 GL • переменные среды: INFORMIDIR, PATH, INFORMIXTERM, INFORMIXSERVER и ONCONFIG; • определенные пользователем переменные среды; • функция fgl_getenv; • команда run языка 4 GL; • команда system языка SPL (хранимые процедуры). 149
Операторы SQL внутри программы на языке 4 GL можно применить в двух режимах: • непосредственно встроить в программу; • с помощью курсоров (prepare, declare и любого из execute или foreach, или open и fetch). 150
Использование функций языка Си в программах 4 GL В случае использования компилированной версии, функции, написанные на языке Си, включаются в исполняемый файл на этапе компоновки из отдельных модулей. 151
Конец – делу венец… 152
8db088aadb8cef0b75eb774dcc4d3cf5.ppt