Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Oracle Tutorial.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
401.64 Кб
Скачать

Оглавление

Введение. 6

Соединение с БД Oracle. 6

Типы данных Oracle, создание и модификация таблиц и вьюшек. 9

Задача. Удаление дубликатов. 11

Задача. Удаление по условию NOT IN. 13

Замена exists/not exists на left join + rowid. 14

Функции по работе со строками. 15

Функции по работе с числами. 16

Троичная логика, конструкция WITH, функции nvl, coalesce, case, decode. 17

Основы PL/SQL. 18

Задача. Факториал. 19

Задача. Подсчет числа вхождений символа в строку. 20

Задача. Подсчет числа вхождений подстроки в строку. 22

Задача. Копирование таблицы фиксированной структуры. 23

Задача. Простановка count в цикле. 25

Задача. Распределение данных по условию. 26

Задача. Использование сиквенсов и DBMS_RANDOM. 27

Задача. Процедура с OUT параметрами. Нотации. 28

Задача. Простой пакет. 31

Задача. Разные виды Count. 33

Database links. 33

Задача. Получение скрипта заполнения таблицы имеющимися данными. 34

Раздача прав (grants). 35

Операции над множествами, joins. 35

Задача. Сравнение множеств. 36

Задача. Загрузка данных с помощью full join. 38

Задача. Проставление роста животных. 41

Jobs. 42

Оператор MERGE. 44

Задача. MERGE данных о студентах. 44

Задача. MERGE данных о клиентах. 45

Функции по работе с датами. 46

Словарь данных. 49

Задача. LAST_DDL_TIME. 50

Задача. Отчет об объектах текущей схемы. 50

Задача. DBMS_OUTPUT из явного курсора по словарю данных. 51

Задача. Компиляция схемы. 52

Задача. Поиск текста во вьюшках. 53

Динамический SQL. 54

Задача. Удаление конкретной таблицы, если она существует. 54

Задача. Удаление любой таблицы с проверкой на существование. 56

Задача. Конструкция '%rowcount'. 56

Задача. Удаление всех таблиц и вьюшек. 58

Задача. Отчет о максимальных ID. 58

Задача. Переименование столбцов. 59

Задача. Создание вьюшек. 61

Триггеры. 62

Задача. Автоинкрементное поле. 62

Задача. Триггер конвертации сумм в валюте. 63

Задача. Триггер логирования DML-операций. 65

Задача. Триггер зеркалирования. 68

Задача. Триггер по поиску в справочнике. 69

Задача. Триггер контроля. 71

Global temporary tables и переменные в заголовке пакета. 73

Global temporary tables. 73

Переменные в заголовке пакета. 74

Регулярные выражения. 75

Задача. Правка некачественных данных регулярными выражениями. 75

Задача. Парсинг строк с помощью регулярных выражений. 76

Автономные транзакции. 79

Задача. Автономное логирование этапов загрузки. 80

Иерархические запросы. 83

Задача. Вывод иерархии с отступами. 83

Задача. Соединение иерархической таблицы с обычной. 84

Задача. Сумма зарплат подчиненных. 86

Задача. Простой календарь. 87

Задача. Детальный календарь. 87

Задача. Календарь с индикаторами выходных дней. 88

Сonstraints 92

С - check constraints 92

P - primary keys 92

R - reference constraints (foreign keys) 93

U - unique constraints 94

Аналитические функции. 94

Отступление о Rownum. 95

Негрупповые аналитические функции. 95

First_value и Last_value. 96

Групповая функция keep dense_rank. 97

Задача. Взятие последней записи о клиенте. 98

Задача. Отчет об изменениях зарплаты. 99

Задача. Пакет функций о вкладах. 100

Задача. Группировка лога выполнения процессов. 102

Задача. Вьюшка с аналитическими функциями по вкладам. 104

Задача. Календарь с аналитикой. 105

Задача. Поиск баланса счета на заданную дату. 106

Задача. Удаление исторических данных о рейтинге. 107

Функции, выдающие более одного значения. 108

Задача. Вызов многозначной функции. 110

"Расклейка" и "склейка" строк. 113

“Расклейка” одной строки. 113

“Расклейка” нескольких строк с группировкой. 113

“Склейка” в одну строку. 114

“Склейка” нескольких строк с группировкой. 114

Задача. Простая расклейка-склейка. 116

Задача. Скрипт создания индексов. 118

Задача. Скрипт создания таблиц. 119

Задача. Отчет о созданных объектах. 119

Задача. Отчет о числе строк в таблицах. 120

Задача. Расклейка списка хобби. 121

Задача. Склейка запроса о максимумах числовых полей. 122

Оптимизация запросов. 124

Введение.

Пособие не претендует на полноту изложения и затрагивает лишь некоторые аспекты работы с БД Oracle, достаточные на взгляд автора для быстрого старта в области разработки задач на Oracle версии 10g.

Пособие рассчитано на читателя, который самостоятельно изучил:

- что такое таблицы;

- написание операторов SELECT, INSERT, UPDATE, DELETE;

- внутренние и внешние объединения таблиц (INNER and OUTER JOINS), их синтаксис;

- опции группировки и сортировки данных GROUP BY и ORDER BY, агрегатные функции.

Постепенно будет даваться теория и задачи. В задачах будет также рассказываться немного теории.

Соединение с бд Oracle.

Чтобы соединиться с БД Oracle, нужно знать 3 вещи: username, password и server.

Принят такой синтаксис передачи информации о соединении:

username/password@server ,

например,

plan/pln@orapreprod .

Username также называют словом “схема”. Когда пишешь кому-то, в какой схеме что-то происходит, нужно написать об этом в формате “на username/password@server” или “на username@server”, если не хочется говорить пароль.

Чтобы проверить связь с сервером, нужно:

  • По-тнс-пинговать сервер из командной строки (cmd):

На скриншоте видим, что команда tnsping выдает путь (Q:\ORA9I\network\admin\), где лежат файлы sqlnet.ora и tnsnames.ora. В этих файлах клиент получает информацию, куда физически нужно подсоединяться, чтобы попасть на заданный сервер Oracle (в данном случае orapreprod). Tnsping выдаст либо время в милисекундах, за которое установлено соединение с сервером (100 msec), либо выругается на недоступность или некорректное имя сервера.

  • Соединиться с сервером sqlplus-ом и выполнить простейший запрос:

После того, как научились соединяться sqlplus-ом, можно соединяться PL/SQL Developer-ом. В PL/SQL Developer-е разумно произвести настройки сочетаний клавиш: Tools->Preferences->Key Configuration (выбрать в верхнем комбобоксе System Default) для опций форматирования и изменения регистра выделенного текста.

Типы данных Oracle, создание и модификация таблиц и вьюшек.

Создадим табличку с полями разных основных типов данных Oracle:

CREATE TABLE KK_SMPL

(

ID INTEGER,

DT DATE,

AMOUNT NUMBER(16, 2),

FULLNAME VARCHAR2(50),

PASSPORT CHAR(11)

);

Основные типы данных oracle таковы:

INTEGER – целочисленный тип,

DATE – дата (которую можно форматировать множеством образов),

NUMBER(M, N) – число с плавающей точкой. M знаков всего, из них N после плавающей точки.

VARCHAR2(M) – строка длиной не более M символов, память тратится оптимально,

CHAR(M) – строка длиной ровно N символов, если вставлять более короткую строку, она дополнится пробелами.

Очистить таблицу от данных (быстрее, чем DELETE-ом) можно командой

TRUNCATE TABLE KK_SMPL;

Сделать копию таблицы (с данными) можно командой:

CREATE TABLE KK_SMPL_COPY AS SELECT * FROM KK_SMPL;

Сделать пустую копию таблицы можно так:

CREATE TABLE KK_SMPL_EMPTY_COPY AS SELECT * FROM KK_SMPL WHERE 0 = 1;

Когда таблица создана, договоримся о том, что не будем лениться в INSERT-ах и SELECT-ах полностью расписывать список полей.

Правильно писать так:

INSERT INTO KK_SMPL_COPY(ID, DT, AMOUNT, FULLNAME, PASSPORT) SELECT ID, DT, AMOUNT, FULLNAME, PASSPORT FROM KK_SMPL;

Этот способ записи лучше, чем упрощенный вариант:

INSERT INTO KK_SMPL_COPY SELECT * FROM KK_SMPL;

Дело в том, что упрощенный вариант перестанет работать, если, например, добавить в KK_SMPL новое поле или поменять порядок полей в KK_SMPL.

Добавим столбец:

ALTER TABLE KK_SMPL ADD BIRTHPLACE VARCHAR2(20);

Расширим столбец:

ALTER TABLE KK_SMPL MODIFY BIRTHPLACE VARCHAR2(30);

Сделаем столбец not nullable (не допускающим пустые значения - NULL):

ALTER TABLE KK_SMPL MODIFY BIRTHPLACE NOT NULL;

Сделаем столбец снова nullable (допускающим пустые значения - NULL):

ALTER TABLE KK_SMPL MODIFY BIRTHPLACE NULL;

Переименуем столбец:

ALTER TABLE KK_SMPL RENAME COLUMN BIRTHPLACE TO PLACE_OF_BIRTH;

Удалим столбец:

ALTER TABLE KK_SMPL DROP COLUMN PLACE_OF_BIRTH;

Переименуем таблицу:

ALTER TABLE KK_SMPL RENAME TO KK_SMPL2;

Удалить таблицу можно командой:

DROP TABLE KK_SMPL2;

Именованные запросы в Oracle называются вьюшками.

Создадим вьюшку:

CREATE OR REPLACE VIEW VW_KK_SMPL AS

SELECT ID, FULLNAME FROM KK_SMPL WHERE AMOUNT > 0;

Сделаем выборку из вьюшки:

SELECT * FROM VW_KK_SMPL;

Команды, которые изменяют структуру данных, называются DDL командами. К ним, например, относятся команды, приведенные выше.

Команды, которые изменяют сами данные, называются DML командами. К ним относятся, например, insert, update, delete.

Длина имен таблиц, полей и прочих объектов в oracle не может превышать 30 символов.

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