Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Ораклу.doc
Скачиваний:
1
Добавлен:
10.08.2019
Размер:
467.46 Кб
Скачать

"Основы работы с базой данных ORACLE"

Лекция 1: Перед стартом.

Курс написан для желающих разрабатывать прикладные программы с использованием базы данных ORACLE. Он предназначен для впервые приступивших к программированию, для уже бравшихся за разработку приложений для баз данных и желающих привести свои знания в систему, а также для студентов высших учебных заведений с недостаточной практической подготовкой. Курс предполагает индивидуальные занятия без преподавателя, так что от вас потребуются навыки самостоятельной работы.

Структура курса

Курс состоит из семи уроков.

  1. Введение.

  2. Проектирование и создание таблиц.

  3. Операции с записями.

  4. Проверка вводимых данных.

  5. Транзакции.

  6. Процедуры и функции на PL/SQL.

  7. Пакеты в PL/SQL.

Первые пять – это обязательные уроки. В них разбираются основные понятия и приобретаются элементарные навыки работы с базой данных.

Два последних урока посвящены программированию на PL/SQL. Это дополнительные уроки. Они больше по объёму материала. Изучаются по желанию.

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

Учебный пример

Курс построен на реальной задаче. Нужно разработать программный модуль для ведения базы счетов на предоплату. Форму счёта вы видите на экране. Такую форму или её вариации можно встретить в повседневной жизни: в отделе продаж, в бухгалтерии, на складе. Форма хороша тем, что легка для понимания, имеет структуру, использует разные типы данных. Кроме того, в ней есть величины, которые рассчитываются по определенным правилам. Тонкости расчёта рассмотрим позже.

Р исунок 1. Форма счёта на оплату товара.

Подготовка к работе

В практической части курса будем использовать программу SQL*Plus. Она входит в состав дистрибутива. При необходимости её можно доставить на компьютер самостоятельно. С её помощью можно подключиться к базе данных и вводить команды, ORACLE будет их выполнять.

SQL*Plus – это приложение с интерфейсом командной строки. Несмотря на кажущуюся "древность", SQL*Plus является незаменимым инструментом. Одновременно простым и мощным.

Может не очень удобно набирать громоздкие команды на клавиатуре, но, как показывает опыт обучения программистов, это действенный метод "закрепления теоретических знаний". Назначение и синтаксис команд освоите точно.

В этом уроке рассмотрим вопрос о подключении к базе данных. Для работы потребуется:

  • установленный сервер ORACLE;

  • рабочая база данных;

  • настроенное клиентское рабочее место;

  • имя и пароль учетной записи;

  • строка соединения с базой данных.

Вы, как начинающий, можете оказаться в одной из следующих ситуаций.

Первая ситуация. У вас есть знакомый человек, к которому можно обратиться за консультацией – администратор базы данных. Попросите его подключить вас к базе данных. Запомните имя, пароль и строку соединения.

Вторая ситуация. Вы самостоятельно установили ORACLE на свой компьютер. Обращаю внимание: на компьютер, за которым предполагаете работать. В процессе инсталляции вам было предложено создать базу данных. Надеюсь, вы согласились. По умолчанию в этой базе данных создаётся демонстрационная схема. Учётная запись называется - scott, пароль - tiger, строка соединения – имя, которое вводили при создании базы данных.

Если ничего не получается: найдите компьютер с "чистым" Windows, установите полный вариант ORACLE. Версия ORACLE желательно от 8.1.5 и старше. В большинстве случаев помогает.

Учитесь. Наберётесь опыта и сможете разобраться с "проблемной" инсталляцией.

Подключение к серверу

Запускаем SQL*Plus и на приглашение вводим: имя пользователя, пароль и строку соединения. В моём случае: пользователь – scott, пароль – tiger, строка соединения - teach. Нажимаем кнопку "OK".

В случае успешного подключения будет выведана строчка с версией сервера и приглашение SQL*Plus. Сообщение с версией сервера у каждого своё.

Рисунок 2. Сообщение об успешном подключении.

Как отключиться? Для этого вводим рядом с приглашением команду SQL*Plus:

disconnect

Отключились.

Типичные ошибки при подключении

При подключении у новичков часто встречаются две ошибки. Одна связана с неправильным указанием сетевого имени базы данных, другая с неправильным вводом имени пользователя и пароля. Смоделируем эти ошибки.

Первая ошибка. Вводим команду:

connect scott/tiger@error

Указываем имя пользователя, обратный слеш, пароль. После символа "@" необходимо указать строку соединения (сетевое имя базы данных). Сейчас вводим его заведомо с ошибкой. В процессе подключения будет выведена вот эта ошибка.

TNS:could not resolve service name

Нужно проверить правильность написания строки соединения. Если всё написано верно и вы уверены, что базе данных назначено это сетевое имя, то проверьте работу сетевых компонентов. Обратитесь к документации ORACLE. В руководстве по SQL*Net детально расписана процедура проверки этих компонентов.

Вторая ошибка. Вводим команду:

connect bad/tiger@teach

Ввел неправильное имя. В моём случае вместо "scott" ввёл "bad". Получаем эту ошибку:

invalid username/password; logon denied

Нужно проверить имя пользователя и пароль. Они должны быть написаны правильно. Регистр букв, большие или маленькие, не имеет значения. Если они написаны без ошибок, то нужно проверить учётную запись в базе данных. Для этого обратитесь к документации ORACLE, раздел управления пользователями (учётными записями).

Лекция 2: Проектирование таблиц.

Таблицы

Напомню вам, что база данных – это набор файлов. Несмотря на то, что они хранятся на жестком диске, напрямую обратиться к ним нельзя. Вернее сказать, можно, но это приведет к порче информации. Доступ к информации в этих файлах обеспечивает программа-сервер базы данных.

Каждый файл определенным образом размечен. Это делается с одной стороны для более эффективной работы программы-сервера, а с другой - для того, чтобы хранить разные данные отдельно друг от друга. Каждому логически обоснованному массиву информации нарезается участок памяти. В свою очередь он разбивается на ещё более мелкие участки – записи. Поскольку информация в массиве однородна, то записи имеют одинаковую структуру.

Рисунок 1. Таблица для представления массива данных.

Логически обоснованный массив информации наглядно можно представлять в форме таблицы. Строки таблицы – это записи. Несколько таблиц – это база данных.

У таблицы есть имя, колонки и строки. Имя нужно для того, чтобы можно было в базе данных отличить один массив информации от другого.

Шапка таблицы, или другими словами, список колонок - это всего лишь описание порядка следования значений в строке. Поскольку для каждой строки эта последовательность одна и та же, принято описывать структуру строк через определение колонок.

Для каждой колонки задаётся имя и тип данных. Основные типы: число, строка и дата.

Количество колонок в таблице фиксировано, а строк может быть сколько угодно или не быть вовсе.

Таблицы для учебного примера

Рассмотрим форму счёта из учебного примера. Зададимся вопросом: "Сколько нужно таблиц для хранения информации из этого счёта в базе данных?"

Явно не одна.

Р исунок 2. Форма счёта на оплату товара.

Во-первых. У документа есть шапка и табличная часть. Уже как минимум две таблицы.

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

Получается, что для хранения счёта потребуется три таблицы: для шапки счёта, для строк с товарами, для строк с услугами.

Таблица для шапки счёта

Займемся таблицей для шапки счёта. Любая таблица имеет имя. Для этой тоже надо придумать. Пусть будет EXDOC.

Р исунок 3. Таблица для шапки счёта.

Далее определяем колонки, которые будут в этой таблице. Берём шапку счёта и выписываем из неё поля. Обращаю внимание, что имя продавца пропущено. Значение во всех строках будет одно и тоже, а посему его можно не хранить. Зато включил в таблицу колонки с общими итогами по документу. Они пригодятся, когда будем изучать PL/SQL.

Кстати, это достаточно удобно. Вот почему. Для расчёта общих итогов нужно будет обращаться и к таблице с товарами, и к таблице с услугами. Многократное обращение к таблицам можно избежать, если в таблицу с шапкой счёта сейчас добавить колонки для хранения уже рассчитанных значений.

Перечень колонок составлен. Теперь каждой дадим имя, которое состоит из латинских букв. Укажем тип данных, которые будут в них храниться. В ORACLE есть следующие типы данных: для хранения чисел – NUMBER; для дат – DATE; для символьных строк - VARCHAR2.

Есть колонки для хранения целых чисел NUMBER(6) и для чисел с двумя знаками после запятой NUMBER( 12, 2). У колонок, которые хранят символьные данные, разная размерность. Имя покупателя должно быть меньше 60 символов. Адрес доставки должен не превышать 120.

Таблицы для позиций с товарами и услугами.

Займёмся таблицей для позиций товаров.

Придумаем имя. Пусть будет EXPOS. Выпишем из формы счёта поля - будущие колонки. Каждой дадим имя. Внимательно рассмотрев форму счёта, для каждой колонки определяем тип данных.

Для проверки можно заполнить таблицу данными из счёта.

Р исунок 4. Таблица с позициями счёта.

Ответим на вопрос: "Как в этой таблице записать строки другого счёта?"

В форму будущей таблицы вписал данные другого счёта. Строки первого счёта выделим одним цветом, строки второго другим. Когда строки раскрашены, можно отделить строки одного счёта от другого. Но ORACLE не умеет раскрашивать записи в таблицах. Создав таблицу с таким набором колонок, не только ORACLE, но и мы сами, не сможем отделить строки одного счёта от другого.

Р исунок 5. Таблица с позициями содержит данные двух счетов.

Вывод: цвет нужно заменить колонками. Добавим колонки с реквизитами счёта. Это "Номер счёта" и "Дата счёта". Имена колонок и тип данных берём из таблицы с шапками счетов EXDOC. Теперь можно сказать однозначно какому счёту принадлежит та или иная позиция.

Р исунок 6. Таблица с позициями с дополнительными колонками.

Осталась третья таблица. Строки для услуг.

С ней всё просто. Придумываем имя. Определяем колонки. Присвоим латинские имена колонкам. Указываем тип, размерность. Добавляем две колонки с реквизитами счёта. Они устранят неоднозначности, обеспечат связь с таблицей счетов.

Р исунок 7. Таблица с услугами.

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

Лекция 3: Создание таблиц.

Подготовка рабочего места

Будем пользоваться программой SQL*Plus. Настроим рабочее место.

Создайте папку, например, "c:\ora-teach". В ней создайте ярлык для запуска SQL*Plus. В свойствах ярлыка поле "Объект", скорее всего, будет иметь значение "c:\oracle\bin\sqlplusw.exe". В качестве рабочей папки укажите, ту, которую создали - "c:\ora-teach".

Р исунок 8. Свойства ярлыка для запуска SQL*Plus.

Запустите программу SQL*Plus. Подключитесь к рабочей базе данных. В диалоговом окне "Log On" введите: имя пользователя, пароль, строку подключения к базе данных.

Создание первой таблицы

1. Создадим таблицу для шапки счетов. Вводим команду.

create table exdoc

( doc_nd number(6)

, doc_dd date

, customer_n varchar2( 60)

, address varchar2( 120)

, total_cost number(12,2)

, total_tax number( 12,2)

, total_doc number( 12,2)

);

Обращаю внимание. При вводе из клавиш управления курсором работает только клавиша "Backspace". Для перехода к новой строке нажимайте "Enter". Вернуться к предыдущей строке никак не получится.

Сделали ошибку – продолжайте вводить. "Кривой" интерфейс SQL*Plus не повод сетовать!

Вводим: название команды – CREATE TABLE; имя таблицы – exdoc; список колонок. Для каждой колонки указываем имя и тип.

Заканчиваем ввод точкой запятой и нажимаем "Enter". Если команда введена без ошибок, то будет создана таблица и SQL*Plus выведет сообщение:

Table created.

Скорее всего команда будет введена с ошибками. SQL*Plus выдаст сообщение, которое содержит подсказку о месте и характере ошибки. Таблица в этом случае создана не будет. Продолжайте урок. Создадите её позже, после исправления команды.

2. SQL*Plus имеет буфер ввода. Программа "помнит" текст последней команды. Просмотреть её можно с помощью команды list. Введите:

list

Ввод команд в SQL*Plus заканчивайте нажатием "Enter".

На экран будет выведено, то, что набрали на предыдущем шаге.

Команду можно вводить не полностью, только первый символ "l". Это команда программы SQL*Plus, т.е. сервер ORACLE её не знает. Используется только в программе SQL*Plus.

3. Команду, которая находится в буфере ввода, можно передать в текстовый редактор и внести в неё правки. Вводим:

edit

Откроется текстовый редактор, в нём будет текст команды из буфера ввода.

Команда edit – это тоже команда SQL*Plus. По умолчанию в качестве текстового редактора используется блокнот Windows. В настройках программы его можно заменить на другой редактор.

Если команда была набрана с ошибками, то исправьте её. После редактирования закройте текстовый редактор.

В процессе завершения программа предложит сохранить текст во временном файле afiedt.buf. Подтвердите сохранение. Окно с текстовым редактором закроется и в SQL*Plus будет выведена набранная команда - содержимое файла afiedt.buf.

4. Выполним команду, т.е. то, что есть в буфере SQL*Plus. Введите символ "/" и нажмите "Enter".

Символ "/" - это команда "Выполнить". Это команда SQL*Plus. Содержимое буфера ввода передаётся серверу для выполнения.

Рассмотрим сообщение.

Если на первом шаге таблица была создана, то SQL*Plus выведет сообщение об ошибке. Повторная попытка создать таблицу с тем же именем приводит к ошибке: таблица с указанным именем уже существует.

Добейтесь правильного выполнения команды. Таблица должна быть создана. Для правки используйте команды list и edit.

Убедитесь в её создании. Повторно введите команду CREATE TABLE.

5. Ещё одна команда SQL*Plus. Вводим:

desc

На экран будет выведена подсказка – синтаксис команды. Для большинства команд SQL*Plus можно получить подсказку. Пользуйтесь этим.

6. Вводим.

desc exdoc

На экран будет выведен список колонок таблицы exdoc.

Эта команда выводит описание таблицы. После ключевого слова desc указываем имя таблицы.

7. В буфере ввода находится команда создания таблицы exdoc. Убедимся в этом. Вводим символ "l" – сокращенно команда list.

Команда присутствует.

8. Текст буфера ввода можно сохранить в файле. Вводим:

save cre_exdoc

Сообщение: создан файл cre_exdoc.sql

save – это команда SQL*Plus для записи буфера ввода в текстовый файл.

Если не указано расширения файла, то по умолчанию оно будет "sql". Файл будет записан в текущий каталог, т.е. туда, откуда запустили программу SQL*Plus.

В учебном курсе набранные команды всё время будем записывать в файл. Большинство из них будут использованы несколько раз в процессе обучения. Отнеситесь к этому с пониманием. В повседневной практике необязательно записывать в файл все набранные команды.