- •ВВЕДЕНИЕ
- •1. ВВЕДЕНИЕ В PL/SQL
- •1.1. ОПИСАНИЕ PL/SQL
- •1.2. ПРЕИМУЩЕСТВА PL/SQL
- •2. КОМАНДЫ DATA DEFINITION LANGUAGE (DDL)
- •2.1. ОСНОВНЫЕ ОБЪЕКТЫ ORACLE
- •2.2. ТАБЛИЦЫ
- •2.5. ИЗМЕНЕНИЯ ОБЬЕКТОВ
- •2.3. ПРЕДСТАВЛЕНИЕ (VIEW)
- •2.4. ИНДЕКС
- •КОНТРОЛЬНЫЕ ВОПРОСЫ К ГЛАВЕ 2
- •3. ЯЗЫК ORACLE SQL
- •3.3. ВЫБОРКА
- •3.4. ОБРАБОТКА ОШИБОК
- •3.5. ВЫРАЖЕНИЯ
- •КОНТРОЛЬНЫЕ ВОПРОСЫ К ГЛАВЕ 3
- •4. ЯЗЫК PL/SQL
- •4.1. ТИПЫ ДАННЫХ PL/SQL
- •4.2. СТРУКТУРА ПРОГРАММЫ НА PL/SQL
- •4.3. УПРАВЛЕНИЕ ВЫПОЛНЕНИЕМ ПРОГРАММЫ
- •4.4. УЧЕБНАЯ БАЗА ДАННЫХ
- •4.5. КУРСОРЫ
- •4.6. ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ
- •4.7. СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ ПРОЦЕДУР И ФУНКЦИЙ
- •4.8. ПАКЕТЫ PL/SQL
- •4.9. ТРИГГЕРЫ БАЗЫ ДАННЫХ
- •ЗАКЛЮЧЕНИЕ
- •СПИСОК ЛИТЕРАТУРЫ
2.2. ТАБЛИЦЫ
Таблица является базовой структурой реляционной модели. Полное имя таблицы в базе данных состоит из имени схемы, как правило, совпадающего с именем пользователя, и имени таблицы.
Оператор определения таблиц имеет следующий синтаксис:
CREATE TABLE [схема.]имя_таблицы ( {ограничение_целостности_таблицы | имя_столбца
тип_данных_столбца
[DEFAULT выражение] [ограничение_целостности_столбца...]},...) [{CLUSTER
имя_кластера(имя_столбца[,...]) |
{PCTFREE целое | PCTUSED целое | INITRANS целое | MAXTRANS целое | TABLESРАСЕ имя_табличной_области | STORAGE размер памяти |
{ RECOVERABLE | UNRECOVERABLE}}...] [PARALLEL возможность_параллельной_обработки]
[{ENABLE проверяемые_ограничения_целостности | DISABLE игнорируемые_ограничения_целостности}...]
[AS запрос] [CACHE | NOCACHE]
DEFAULT указывает на то, что при вводе данных соответствующему столбцу будет присвоено значение, определённое переменной выражение, если в операторе INSERT не указано явно другое значение столбца. Типданных выражений должен соответствовать типу данных столбца и выражение не должно содержать ссылок надругие выражения.
Ключевые слова PCTFREE, PCTUSED, INITRANS, MAXTRANS, TABLESPACE, STORAGE, RECOVERABLE, UNRECOVERABLE характе-
ризуют пространство, распределяют его при работе с таблицей.
PCTFREE определяет процент пространства блока, который резервируется для модификации таблицы. Допустимые значения от 0 до 99. Значение по умолчанию 10, т.е. при заполнении каждого блока, 10% пространства остаётся неиспользованным. Это пространство используется для записи в него данных привыполнении в дальнейшем модификации строк таблицы.
PCTUSED определяет минимальный процент использования пространства блока, при котором в него вводятся данные, по умолчанию 40, т.е. если в блоке занято менее 40% пространства, в него вводятся данные при выполнении
13
операции вставки. Сумма значений параметров PCTFREE и PCTUSED не должна превышать 100.
INITRANS определяет начальное число параллельных транзакций, которые могут выполняться для модификации данных блока. Значение по умолчанию 1.
MAXTRANS определяет максимальное число параллельных транзакций, которые могут выполняться для модификации данных блока. В большинстве случаев явное задание этих параметров не требуется.
TABLESPACE определяет имя табличной области, в которой будет размещена таблица. Если значениепараметра не определено, то таблица размещается в табличной области, заданной по умолчанию для пользователя, который является владельцем схемы, содержащей таблицу.
STORAGE определяет объём внешней памяти, выделяемый под таблицу. Для больших таблиц целесообразно явно выделять требуемую память, чтобы уменьшить число запросов на динамическое выделение пространства.
RECOVERABLE и UNRECOVERABLE. Для управления записью в журнальный файл контрольной информации используются ключевые слова
RECOVERABLE, UNRECOVERABLE. Значение UNRECOVERABLE может быть использовано только с ключевым словом AS подзапрос, при этом операция создания таблицы выполняется быстрее за счёт исключения записи управляющей информации в журнал. Но при этом автоматическое восстановление операции создания таблицы в случае сбоя становится невозможным.
CLUSTER указывает привязку столбцов таблицы к кластеру. Обычно столбцы кластера образуют из элементов первичного ключа.
ENABLE указывает на включение ограничений целостности для данной таблицы. Соответствующее ограничение целостности должно быть определено в данном предложении создания таблицы. По умолчанию все ограничения целостности, определённые в предложении, включаются.
DISABLE указывает на выключение ограничений целостности для данной таблицы. Соответствующееограничение целостности должно быть определено в данном предложении создания таблицы.
AS запрос включает в создаваемую таблицу строки, являющиеся результатом выполнения запроса. Необходима определённая осторожность при использовании вставки строк через подзапрос и определение ограничений целостности в том же предложении. Если результат запроса не соответствует ограничениям целостности, то Oracle не создаёт таблицу и возвращает сообщение об ошибке.
14
CACHE указывает на то, что блоки, выбираемые из таблицы, помечаются в системном кэше, как наиболее используемые. Оно рекомендуется для маленьких таблиц, используемых для преобразования кодов в значения. По умолчанию используется NOCACHE, для которого выбранные блоки помещаются в конец таблицы частот обращений к кешу.
Запрос – есть предложение SELECT. Столбцы, извлекаемые запросом, должны соответствовать столбцам, перечисленным в операторе CREATE TABLE. Тип данных и ширина столбцов создаваемой таблицы при этом получаются такими же, как у столбцов, извлекаемых запросом. Если столбцы в запросе имеют полностью определённые уникальные имена, то имена столбцов после CREATE TABLE можно опустить – они будут унаследованы от запроса. После создания таблицы в нее загружаются данные, извлеченные запросом. В запросе нельзя употреблять предложения ORDER BY и FOR UPDATE OF. Параметры элементы_таблицы, в случае использования запроса, могут содержать только имена столбцов. Чтобы добавить столбец или ограничение, следует использовать оператор ALTER TABLE...ADD. Чтобы модифицировать ограничение его нужно сначала удалить (ALTER TABLE DROP CONSTRAINT), а затем вновь добавить (ADD).
Удалить таблицу | кластер можно командой DROP TABLE имя_таблицы
DROP CLASTER имя_кластера
Типы данных столбца, как правило, следует применять следующие: Строковые типы:
Тип CHARACTER – используется для хранения строк фиксированной длины.
Синтаксис: { CHARACTER[(длина)] | CHAR[(длина)] }
Максимальное значение параметра длина – 255 символов.
Типы VARCHAR и VARCHAR2 используется для хранения строк переменной длины.
Синтаксис: VARCHAR2[(длина)]
Максимальная ширина столбца базы данных типа VARCHAR2 равна 4000
байт
VARCHAR[(длина)]
Максимальное значение параметра длина – 2000 символов.
Замечания.
1.Рекомендуется использовать VARCHAR2
2.Если длина строки не указана явно, она полагается равной единице во всех случаях
15
LONG[(длина)]
Используется для хранения больших строк переменной длины. Если параметр длина не указан, то предполагается, что у строки длина 2 Mb, максимальная длина – 2 Gb. Тип LONG оставлен для совместимости с предыдущими версиями ORACLE. Вместо него рекомендуется использовать тип CLOB
Числовые типы:
Тип NUMBER – используется для представления чисел с заданной точностью.
Синтаксис: NUMBER[ (точность [.масштаб] ) ]
Если значение параметра точность не указано явно, оно полагается равным 38. Значение параметра масштаб по умолчанию предполагается равным 0. Значение параметра точность может изменяться от 1 до 38; значение параметра масштаб может изменяться от –84 до 128. Использование отрицательных значений масштаба означает сдвиг десятичной точки в сторону старших разрядов. Например, определение NUMBER(7, –3) означает округление до тысяч.
Битовые строки:
Тип RAW – используется для хранения битовых строк переменной длины. Отличие типа RAW от типов CHAR, VARCHAR2 состоит в том, что для типов символьных строк ORACLE проводит автоматическое преобразование данных при их передаче между клиентом и сервером.
Синтаксис: RAW[(длина)]
Параметр длина измеряется в байтах. Максимальное значение – 255 байт. Тип LONG RAW – используется для хранения больших битовых строк
переменной длины.
Синтаксис: LONG RAW [(длина)]
Параметр длина измеряется в байтах. Если длина строки не указана явно, она полагается равной 2 Mb. Максимальное значение параметра длина – 2 Gb символов. Для переменных типа LONG RAW невозможнопостроение индекса.
Тип LONG RAW оставлен для совместимости с предыдущими версиями ORACLE. Вместо него рекомендуетсяиспользовать тип BLOB
Типы дата и время:
Тип DATE используется для хранения даты и времени. Поддерживаются даты с 01.01.4712 до н. э. до 31.12.4712 н. э. Для присваивания даты обычно используется функция ТО_DАТЕ( 'символьная_строка_даты', 'формат_даты' )
Синтаксис: DATE
CONSTRAINT (Ограничения)
Под ограничениями понимаются условия, накладываемые на таблицу. При этом данные, не удовлетворяющие данному условию, не попадут в таблицу.
16
Синтаксис описания ограничений для таблицы:
UNIQUE | PRIMARY KEY столбец, столбец,...
CONSTRAINT имя_ограничения
FOREIGN KEY столбец, столбец,... REFERENCES [схема.]таблица столбец, столбец,...CONSTRAINT имя_ограничения
CHECK условие CONSTRAINT имя_ограничения Синтаксис описания ограничений для столбца:
столбец NULL | NOT NULL CONSTRAINT имя_ограничения
UNIQUE | PRIMARY KEY CONSTRAINT имя_ограничения REFERENCES [схема.]таблица столбец CONSTRAINT имя_ограниченияCHECK условие CONSTRAINT имя_ограничения
Предложение, описывающее ограничение, позволяет определить диапазон допустимых значений одного столбца (ограничение для столбца) или группы столбцов (ограничение для таблицы). Каждый оператор INSERT, UPDATE и DELETE будет проверяться на соответствие правилам, установленных ограничением, и будет выполнен успешно только, если он удовлетворяет этим правилам.
Ограничения для таблиц являются частью глобального описания таблицы,
типа:
CREATE TABLE employee (PROJECT NUMBER, EMPLOYEE NUMBER,
PRIMARY KEY (PROJECT, EMPLOYEE))
В свою очередь ограничения для столбцов являются локальными для ука-
занных столбцов, к примеру, CREATE TABLE dept (DEPTNO NUMBER PRIMARY KEY,...)
Ограничения описываются в операторах CREATE TABLE и ALTER TABLE. Оператор ALTER TABLE позволяетдобавлять и уничтожать ограничения. Все определённые ограничения заносятся в словарь данных. Если ограничению не дали имя, то оно будет названо SYS_Cn, где n – целое число, используемое для обеспечения уникальности имени в базе данных.
Столбец, к которому относится ограничение NULL | NOT NULL разрешает/запрещает столбцу иметь пустое значение (NULL).
UNIQUE указывает, что все значения в этом столбце должны быть разными. Каждый такой столбец должен быть описан с атрибутом NOT NULL и не должен быть первичным ключом, поскольку первичный ключ и такуникальный.
PRIMARY KEY определяет столбец как первичный ключ.
17
FOREIGN KEY столбец, столбец...REFERENCES [схема.]таблица стол- бец,столбец...-определяет столбец (или столбцы) как внешний ключ к [схема.]таблица столбец. Подразумеваемый столбец – первичный ключ таблицы.
CHECK устанавливает условие, которому должно удовлетворять значение столбца. В описании условия CHECK для столбца можно ссылаться только на тот столбец, к которому оно относится. УсловиеCHECK для таблицы может ссылаться на несколько столбцов.
Пример. Чтобы описать таблицу staff, следует ввести:
CREATE TABLE staff (
empno NUMBER NOT NULL PRIMARY KEY,
ename CHAR(20) NOT NULL CHECK (ename = UPPER), job CHAR(10),
mgr NUMBER REFERENCES stud1_1.staff(empno), hiredate DATE CHECK (hiredate >= SYSDATE – 7), sal NUMBER(10,2) CHECK (sal > 800),
comm NUMBER(9,2) DEFAULT NULL,
deptno NOT NULL REFERENCES stud1_1.dept(deptno)
)
В системе определена таблица DUAL, которую можно использовать для вычисления выражений, работы с поледовательностями, отладки хранимых процедур и функций и др., например:
SELECT (5*2) FROM dual
SELECT my_seq.CURRVAL INTO my_per FROM dual |
-- |
для |
PL/SQL
Ограничение FOREIGN KEY/REFERENCES:
−не даёт выполниться операторам INSERT и UPDATE, если соответствующих значений нет в таблице,содержащей первичный ключ;
−не позволяет выполниться оператору DELETE, если его результат приводит к нарушению ограничения REFERENCES;
−должно ссылаться на столбец первичной таблицы (т.е. содержащей первичный ключ), определённый как PRIMARY KEY или UNIQUE;
−если не указан столбец (столбцы), то ограничение будет использовать тот столбец первичного ключа, которыйопределен как PRIMARY KEY;
−может ссылаться только на таблицу. На представление данных или кластер ссылаться нельзя;
18
−требует, чтобы таблица, хранящая первичный ключ, принадлежала Вам и чтобы Вы имели к доступ с правом REFERENCE либо к таблице, либо только к столбцам, на которые Вы ссылаетесь при описании ограничения;
−никак не ограничивает использование тех же таблиц в описании других ограничений;
−требует совпадения типов данных в столбце (столбцах) внешнего ключа и в столбце (столбцах), к которымописывается ограничение;
−может ссылаться на ту же таблицу, что и в операторе CREATE
TABLE;
− в одном ограничении не может ссылаться на столбец более одного
раза.
Ограничения могут описываться в команде CREATE TABLE, либо добавляться/отменятьсякомандой ALTER TABLE.
Например, запись
CREATE TABLE tb2 (id number(4) primary key, fk number(4)
REFERENCES tb1(id) )
эквивалентна паре записей:
CREATE TABLE tb2 (id number(4) primary key, fk number(4)
)
и
ALTER TABLE tb2 ADD FOREIGN KEY(fk) REFERENCES tb1(id)
Псевдостолбцы в SQL очень схожи с обыкновенными столбцами, за исключением того, что они не хранятся ни в одной таблице. Из псевдостолбцов можно извлекать данные, но нельзя добавлять, обновлять и удалять (т.е. нельзя делать INSERT, UPDATE и DELETE):
Псевдостолбец |
Содержит |
|
|
Последоват. |
Следующее сгенерированное число |
NEXTVAL |
|
|
|
Последоват. |
последнее сгенерированное число |
CURRVAL |
|
|
|
ROWID |
уникальный идентификатор строки таблицы |
|
|
ROWNUM |
порядковый номер строки в результатах выборки из од- |
|
ной или нескольких таблиц |
|
|
LEVEL |
1 = отец, 2 = сын, 3 = внук и т.д. |
|
|
19
