Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными. Использование технологий ORACLE для реализации баз данных. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
722 Кб
Скачать

либо иметь права DBA. Все соответствующие индексы уничтожаются вместе с таблицей. Представления данных и синонимы, ссылающиеся на уничтоженную таблицу, остаются, но становятся ошибочными. Их нужно или тоже уничтожить, или откорректировать так, чтобы они стали действительными. Блоки всоответствующей области хранения, которые занимали данные и индексы таблицы, освобождаются (если таблица не была кластеризована).

Оператор DROP CLUSTER INCLUDING TABLES уничтожает все табли-

цы, входящие в кластер.

Небесполезно перед уничтожением таблицы просмотреть представление. данных USER_CROSS_REFS в словареданных, чтобы найти все ссылки на подлежащую уничтожению таблицу.

DROP VIEW [схема.]предст_данных

Удаляет из базы данных указанное представление данных (виртуальную таблицу). Чтобы уничтожить представление данных нужно быть либо его владельцем, либо иметь права DBA. После уничтожения представления данных все ссылающиеся на него представления и синонимы остаются, но становятся недействительными. Их нужно либо удалить, либо откорректировать так, чтобы они стали действительными. Чтобы изменить представление данных, его следует уничтожить и создать заново. Альтернативный вариант – использование термов CREATE OR REPLACE Перед уничтожением представления необходимо просмотреть представлении данных USER_CROSS_REFS в словаре данных, чтобы найти все ссылки на подлежащее уничтожению представление.

КОНТРОЛЬНЫЕ ВОПРОСЫ К ГЛАВЕ 2

1.Для чего применяется оператор DESCRIBE?

2.Что такое таблица?

3.Из каких элементов состоит таблица?

4.В чём разница между полями, содержащими значения 0 и NULL?

5.С помощью оператора CREATE TABLE имя_таблицы AS SELECT может быть создана копия таблицы?(Да / Нет)

6.Можно отменить команду DROP COLUMN и возвратить столбец в таблицу? (Да / Нет)

7.Создайте таблицу people со столбцами:

Dept (числовое 4 разряда);

Last_name (символьное 10 позиций);

Start_date (дата);

26

Salary (числовое 6 разрядов с двумя десятичными знаками).

9. Вставьте следующие данные в таблицу (применив подстановочный символ &):

10, SMITH, SYSDATE, 10000;

10, JONES, SYSDATE, 20000;

20, KING, SYSDATE, 15000;

20, JONES, SYSDATE, 18000;

20, LAMER, SYSDATE, 12000.

10.Объясните, в чём ошибка и исправьте.

11.Сохраните программу (скрипт) создания и заполнения в свой рабочий директорий в файл CreatePeople.SQL.

12.Используя оператор SELECT*, посмотрите содержимое.

13.Используя оператор CREATE TABLE, создайте таблицу-копию, но с другим именем.

14.Удалите таблицу-копию.

15.Ограничения предназначены для (назвать пункт):

a)поддержания родительско-дочерних связей между таблицами;

b)обеспечения наличия в поле только данных определённого типа;

c)обеспечения уникальности данных таблицы;

d)всего вышесказанного.

16.Создайте ограничение первичного ключа на столбце dept.

17.Создайте индекс на столбце last_name.

18.Создайте представление people_sal, которое включает только last name и salary. Посмотрите его структуру. Чемоно отличается от исходной таблицы?

19.Посмотрите содержимое представления people_sal.

20.Отмените опцию AUTOCOMMIT, удалите все строки в таблице people и выдайте команду ROLLBACK. Убедитесь в том, что все строки восстановлены.

21.Добавьте в таблицу people столбец birthday.

22.Заполните столбец birthday (оператор UPDATE).

27

3. ЯЗЫК ORACLE SQL

3.1.АЛИАС

Таблице или столбцу можно присвоить альтернативное имя (алиас), действие, которое будет действительно только впределах оператора, в котором оно определено. Если альтернативное имя стоит после имени столбца в списке оператора SELECT, то оно будет использоваться вместо настоящего имени как заголовок для данного столбца.

SQL> SELECT ename «ИМЯ», empno «НОМЕР», sal «ОКЛАД»

FROM emp

WHERE job = ‘ANALYST’ ORDER BY NAME;

Альтернативное имя таблицы можно использовать при соединении таблицы с самой собой в соотносящемся запросе.

При создании курсора альтернативное имя создаётся другим способом – заданием после имени курсора перечисления новых имён полей (указывать в скобках через запятую).

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

SQL>SELECT wkr.ename, wkr.sal, sup.ename, sup.sal FROM

emp wkr, emp sup

WHERE wkr.mgr = sup.empno

AND wkr.sal > sup.sal;

ПУСТЫЕ ЗНАЧЕНИЯ

Пустое значение означает, что данные не известны, отсутствуют или бессмысленны в данном контексте. Пустое значение могут иметь столбцы с любым типом данных, если они не были определены как NOT NULL. Пустые значения применяются в случаях, когда конкретные значения неизвестны или бессмысленны. Пустое_значение и значение_равное_нулю – представляют собой совершенно разные вещи. Все выражения, содержащие хотя бы одно пустое значение, равны также пустому значению. Для оперативной подстановки непустых значений вместо пустых следует использовать функцию NVL. Например, NVL(comm, 0) вернет значение comm, если оно не пустое, или 0, если оно пустое. При проверке на пустое значение надо использовать только операторы IS или IS NOT. Любой другойоператор при сравнении с пустым значением всегда вернет пустое значение. Групповые функции при вычислениях игнорируют пустые значения.

28

 

РАЗДЕЛИТЕЛИ

 

 

( )

оператор; служит для объединения параметров

 

 

+ – * /

арифметические операторы

 

 

= < >

логические операторы

 

 

;

признак конца оператора SQL

 

 

%

признак системного атрибута PL/SQL

 

 

,

разделитель элементов в списке

 

 

.

ссылка на таблицу.имя_поля и запись.имя_поля в PL/SQL

 

Точка на отдельной строкесвидетельствует об окончании бло-

 

ка PL/SQL

 

 

@

ссылка на удаленную БД

 

 

@ имя_файла

выполняет командный файл

 

 

‘ ‘

ограничивает строки символов (‘еклмн оклжп чшц’)

 

 

« «

позволяет писать в идентификаторах что угодно

 

 

:

простые переменные или переменные связи включающего

 

языка

 

 

<> != ~= ^= <=

операторы сравнения в PL/SQL

>=

 

 

 

<< >>

ограничители имен циклов, блоков и меток (для GOTO) в

 

PL/SQL

 

 

--

начало строки комментария в блоке PL/SQL

 

 

/*

начало многострочного комментария

 

 

*/

конец многострочного комментария

 

 

..

диапазон числового цикла FOR в PL/SQL

 

 

:=

присвоение значения переменной в PL/SQL

 

 

**

возведение в степень

 

 

||

объединение строк

 

 

29

 

ПРОЧИЕ ТЕРМЫ

 

 

Терм

Смысл или действие в SQL

 

 

(+)

Предыдущий столбец является столбцом избыточного соединения

 

(в соединении таблиц).

 

 

(*)

Извлекать все столбцы таблицы (SELECT * FROM...). таблица.

 

 

*

Извлекать все столбцы указанной таблицы (SELECT таблица.*

 

FROM...).

 

 

ALL

В запросе или группировании не отбрасывать повторяющиеся зна-

 

чения, а извлекать все.

 

 

DISTINCT

В запросе или группировании отбрасывать повторяющиеся дан-

 

ные. Подразумевается всегда ALL.

 

 

PRIOR

Используется в предложении START WITH ... древовидного за-

 

проса для определения отношенияотец-сын.

 

 

 

3.2. DDL, DML и PL/SQL

Будем считать, что команды Data Definition Language (CREATE, DROP, ALTER и др.) в блоке кода PL/SQL – применять нельзя. Это значит, что выпол-

нять их можно только в SQL. Команды Data Manipulation Language (INSERT, UPDATE, DELETE) можно включать в блок кода PL/SQL. Приведём здесь краткий обзор базовогосинтаксиса команд DML.

В языке SQL определены четыре инструкции DML:

1)INSERT – вставляет в таблицу одну или несколько новых строк;

2)UPDATE – обновляет в одной или нескольких существующих строках таблицы значения одного илинескольких столбцов;

3)DELETE – удаляет из таблицы одну или несколько строк;

4)SELECT – выбирает данные из таблицы.

INSERT

Существуют две базовые разновидности инструкции INSERT:

1)вставка одной строки с явно заданным списком значений: INSERT INTO имя_таблицы [(столбец1, столбец2,… столбецN)] VALUES (значение1. значение2,… значение_N);

2)вставка в таблицу одной или нескольких строк, определяемых инструкцией SELECT, которая извлекает данные из одной или нескольких других таблиц: INSERT INTO имя_таблицы [(столбец1, столбец2,… столбецN)] AS

SELECT ... .

30

Имена в списке столбцов могут быть перечислены в любом порядке. В столбцы, не указанные в списке, заносится пустое значение. Все столбцы с признаком NOT NULL должны быть указаны и иметь предназначающиеся для них значения. В предложении VALUES перечисляются конкретные значения столбцов в добавляемой строке. Каждый указанный столбец должен иметь соответствующее ему значение в предложении VALUES. Типы данных значения истолбца должен быть совместимы или преобразуемы. Значения типа CHAR и DATE надо заключать в одинарные кавычки (‘абв’). Чтобы добавить строки из другой таблицы, следует использовать подзапрос. Оператор SELECT в этом подзапросе должен извлекать значения для каждого перечисленного столбца.

UPDATE

С помощью этой инструкции можно обновить один или несколько столбцов или одну или несколько строк таблицы. Ее синтаксис:

UPDATE имя_таблицы SET столбец1 = значение1 [, столбец2 = значение_2, … столбецN = значениеN]) [WHERE условие];

если WHERE не задано, обновляются все строки таблицы.

Примеры.

1. Представление названий книг таблицы books в символах верхнего регистра:

UPDATE books SET title = UPPER (title)

2. Выполнение процедуры, удаляющей компонент времени из даты издания книг, которые были написаны указанным в аргументе автором, и переводящей названия этих книг в символы верхнего регистра:

CREATE OR REPLACE PROCEDURE remove_time (author_in IN VARCHAR2) IS BEGIN

UPDATE books

SET title = UPPER (title), date_published = TRUNC (date_published) WHERE author LIKE author_in; END;

DELETE

Предназначена для удаления одной или нескольких или всех строк таблицы: DELETE FROM имя_таблицы [WHERE условие]

Если WHERE не задано, удаляются все строки таблицы.

Примеры.

1. Удаление всей информации о книгах из таблицы books:

DELETE FROM books

31

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]