Встроенные операторы SQL.

Как было отмечено ранее SQL (Structured Query Language) - структурированный язык запросов, позволяет оперировать данными в реляционных базах данных. Стандарт SQL определен Американским национальным институтом стандартов и ISO в качестве международного стандарта. Целью данного издания не является полное и всеобъемлющее освещение синтаксиса SQL, для этого есть специализированные справочники и документация [1-10], мы же постараемся на нескольких простых конкретных примерах показать Вам всю элегантность и мощь SQL. Все примеры, приведенные ниже даны, применительно к ER-диаграмме ДОКТОР-ПАЦИЕНТ, приведенной на рис.10.

Что же из себя представляет SQL - программа? Чаще всего это оформленная в виде отдельного файла программная конструкция, написанная в любом текстовом редакторе с учетом требований синтаксиса языка SQL. Такая форма представления SQL программы - называется скриптом и предназначена для выполнения на сервере, например с помощью специальной терминальной программы SQL+ (строка запуска скрипта в SQL+: @<путь>/<имя скрипта>.sql). Считается хорошим тоном наличие в скрипте комментариев. Для выделения строчных комментариев используется следующий набор символов: --.

Перед тем как перейти непосредственно к рассмотрению использования основных SQL операторов еще несколько слов об организации проектирования БД. Процесс создания БД - это сложный многоэтапный процесс, причем как правило в нем принимают участие большое число разработчиков, поэтому очень важным является правильная организация внесения изменений в БД. Для этих целей очень часто используется технология "РАЗДЕЛЕНИЯ ЗАДАЧ", которая заключается в следующем: каждый разработчик, выполняя конкретную часть создания или модификации БД, оформляет все производимые им изменения в виде скриптов (т.е. отдельных файлов), архивные версии которых перед запуском на сервере размещаются на отдельном, специально выделенном, носителе (диске сервера), причем каждое такое изменение БД оформляется в виде отдельной задачи, имеющей свой уникальный номер. Например, в задаче 000001/VER001/ (физически это просто каталог на диске) находятся все скрипты (файлы) по первоначальному созданию БД. Такой подход позволяет максимально удобно решать задачи "Контроля версий", производить миграцию созданной БД на другой сервер (достаточно на новом сервере выполнить все задачи в последовательности следования номеров задач), обеспечивает достаточно высокий уровень безопасности, возможности отката на любую предыдущую позицию (этап разработки БД) и многое другое. В дальнейшем при выполнении практических примеров приведенных в данном издании советуем вам придерживаться именно этой технологии. Если вы на каком-то из этапов допустили ошибку (которую выявили на этапе выполнения скрипта в БД) не надо исправлять текст непосредственно этого скрипта, оформьте новую версию выполняемой задачи, в которой разместите исправленный скрипт. Это позволит Вам всегда отслеживать все Ваши ошибки. Последняя рекомендация, которую хотелось бы дать, заключается в том, что если в задачу входит несколько скриптов, то целесообразно оформить один дополнительный запускающий скрипт, например start.sql, в который поместить запуск всех остальных скриптов. Поверьте на слово - это значительно съэкономит ваше время в дальнейшем. Например, если в задачу 000001/VER001/ входят файлы: db1.sql., db2.sql, db3.sql, то файл start.sql может быть представлен следующим способом:

************************* start.sql *******************************
Spool 000001.log
@db1.sql
@db2.sql
@db3.sql
spool off
***************************************************************

При этом необходимо помнить, что все файлы должны быть в кодировке той среды, из которой вы собираетесь запускать SQL+ (KOI8, Win1251, DOS).

ОПЕРАТОРЫ СОЗДАНИЯ ОБЪЕКТОВ БД.

Перед тем как работать с данными с БД ее надо создать, для этих целей используется специальная группа операторов, предназначенных для создания объектов базы данных, все операторы данной группы начинаются с ключевого слова CREATE.

CREATE DATABASE

Создает базу данных. Задает и определяет максимальное число экземпляров файлов данных и журнальных файлов, устанавливает режим архивирования.

Filespec (файлы данных)::=

Filespec (журнальные файлы)::=

-- Скрипт создания БД CLINICS
spool clinic.log
connect internal
startup nomount pfile=/oracle/dbs/initclinic.ora
-- создаем базу данных с именем clinics
create database "clinics"
    maxinstances 1
    maxlogfiles  10
    character set "RU8PC866"
    national character set "RU8PC866"
    datafile
'/oracle/db/system01.dbf' size   100M
    logfile
'/oracle/db/lo  g01.dbf' size 1M,
'/oracle/db/log02.dbf' size 1M;
disconnect
spool off

CREATE TABLESPASE

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

CREATE USER

Создает пользователя базы данных. (синтаксис команды приведен упрощенно, за дополнительной информацией обратитесь к документации).

CREATE ROLE

CREATE SCHEMA

Создает несколько таблиц и представлений и предоставляет некоторые привилегии в одной транзакции.

CREATE TABLE

Создает новую таблицу БД, определяя ее столбцы, правила целостности и параметры хранения.

Пример:

create table DOCTORS(
DC_NNN NUMBER(12,0)
, DC_DC_NNN NUMBER(12,0)
, DC_NAME VARCHAR2(255)
, DC_CS_NNN NUMBER(12,0)
, DC_DIPLOMA_NUMBER NUMBER(12,0)
, DC_SPECIALTY_NNN NUMBER(12,0)
, DC_SHAT_NNN NUMBER(12,0)
, DC_CALENDAR NUMBER(12,0)

 )   tablespace users;

CREATE SYNONYM

Создает синоним для таблицы, представления, последовательности, хранимой процедуры или функции, пакетной процедуры, моментальной копии или другого синонима.

Пример: Сначала удаляем публичный синоним для таблицы DOCTORS, а потом его заново создаем.

drop public synonym DOCTORS;
create public synonym DOCTORS for DOCTORS;

CREATE INDEX

Создает индекс для заданных столбцов таблицы или кластера.

Пример:

create  UNIQUE  index I_DOCTORS  on DOCTORS (
   DC_NNN
 ) tablespace users;

CREATE TRIGGER

Создает триггер базы данных.

CREATE SEQUENCE

Создает новую последовательность для генерации первичных ключей.

Пример:

create sequence S_DOCTORS;

Пример: Приведем полный текст скрипта для создания триггера для таблицы DOCTORS, который будет следить за автоматическим увеличением значения поля DC_NNN на единицу при добавлении каждой новой записи в таблицу DOCTORS, что потребует от нас использование и такой конструкции - как сиквенс (генератор последовательностей).

-- Сначала удаляем предыдущие изменения в базе (если конечно они были сделаны)
drop sequence S_DOCTORS;
drop trigger tr_DC_NNN;
drop public synonym DOCTORS;
-- создаем таблицу
-- назначаем права доступа
-- создаем публичный синоним
CREATE PUBLIC SYNONYM DOCTORS FOR DOCTORS;
-- создаем сиквенс и устанавливаем его начальное значение в единицу
create sequence S_DOCTORS
start with 1;
-- создаем индексы
create unique index i_dc_nnn on doctors(dc_nnn);
create index i_dc_name on doctors(dc_name);
-- создаем триггер
create trigger tr_dc_nnn
before insert
on doctors
for each row
begin
  select dc_nnn.nextval into :new.dc_nnn from dual;
end;
/

Назад | Содержание | Вперед