
- •Обзор баз данных Oracle
- •Обзор Oracle
- •Теоретические и физические аспекты реляционных баз данных
- •Рсубд против систем плоских файлов: быстрое ознакомление
- •Закрепление пройденного материала
- •Упражнения
- •Реализации рсубд и орсубд Oracle
- •Дисковые компоненты Oracle
- •Процесс сервера и фоновые процессы Oracle
- •Что такое орсубд
- •Закрепление пройденного материала
- •Упражнения
- •Использование и преимущества pl/sql
- •Закрепление пройденного материала
- •Упражнения
- •Написание основных операторов sql
- •Возможности операторов sql select
- •Познакомьтесь: sql* Plus
- •Закрепление пройденного материала
- •Упражнения
- •Выполнение операторов select
- •Задание префиксов столбцам по имени таблицы
- •Арифметические данные и данные из таблиц
- •Старшинство операторов
- •Обработка значений null
- •Замена заголовков столбцов псевдонимами
- •Объединение столбцов с помощью конкатенации
- •Закрепление пройденного материала
- •Упражнения
- •Различия между командами sql и sql*Plus
- •Использование текстового редактора
- •Запись команд sql в сценариях
- •Другие команды sql*Plus, о которых следует знать
- •Закрепление пройденного материала
- •Упражнения
- •Резюме Обзора баз данных Oracle
- •Двухминутное погружение в пройденное
- •Вопросы для самопроверки
- •Вопросы ко всей теме
Закрепление пройденного материала
Что такое SQL? На что способен SQL? Каким вам видится SQL в сравнении с другими языками программирования, например Java и С?
Упражнения
1. Вы заняты определением того, какой тип оператора SQL использовать в базе данных Oracle. С помощью какого из перечисленных ниже типа операторов вы сможете выбрать данные из базы данных?
A. Select В. update
С Insert D. delete
2. Какой из перечисленных ниже языков программирования является функциональным?
А. С В. Java
С COBOL D. SQL
Укажите команду, являющуюся частью языка управления данными SQL (DCL).
Укажите команду, являющуюся частью языка манипулирования данными SQL (DML).
Укажите команду, являющуюся частью языка определения данных SQL (DDL).
Ответы
1. А. 2. D.
3. grant или revoke.
4. update, delete или insert. Oracle не считает оператор select частью DML.
5. create, alter, drop.
Выполнение операторов select
Наиболее часто встречающимся оператором SQL, выполняемым в большинстве сред баз данных, является оператор select, который обращается с запросом к таблице базы данных, чтобы получить из нее запрошенные данные. Таблицы Oracle на концептуальном уровне похожи на так называемые электронные таблицы (spreadsheets). Посмотрите на следующий блок кода, где вы можете увидеть оператор select в контексте сеанса с Oracle:
S/home/oracle> sqlplus scott/tiger
SQL*Plus: Release 8.1.7.0.0 - Production on Fri July 06 18:53:11 2001
Copyright (c) Oracle Corporation 1979, 2000. All rights reserved.
Connected to: Oracle9i Release 9.0.1.0.0
With the partitioning option
JServer Release 9.0.1.0.0 Production
SQL> select * from emp;
EMPNO ENАМЕ JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7693 BLApE MANAGER 7839 Ol-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUNE-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7S39 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-31 1500 0 30
7376 ADAMS CLERK 7783 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7732 23-JAN-82 1300 10
14 rows selected.
Совет В последней части блока кода Oracle сообщает, сколько строк получено из базы данных в ответ на выданную команду SQL. Впоследствии мы будем опускать эту строчку ради экономии места. Можно дать указание SQL*Plus не показывать информацию о счетчике строк, используя для этого команду SQL *Plus set feedback off. О командах SQL *Plus мы поговорим более подробно уже в этой главе.
Первая часть, содержащая информацию об авторских правах, является просто пригласительным сообщением SQL*Plus. По вашему желанию печать этой информации можно отменить. Для этого достаточно при вызове SQL*Plus из командной строки операционной системы ввести sqlplus -s и нажать Enter- Расширение -s указывает, что SQL*Plus должен выполняться в режиме молчания. Иногда это бывает полезно для пакетных программ, которые записывают выходные данные в файл для последующего автоматизированного ввода, где нежелательно иметь посторонний "мусор" во входной информации, так как это может привести к ошибкам. Далее в этой главе мы изучим некоторые команды SQL*Plus, которые помогут нам управлять внешним видом выходных данных. Часть строки в блоке кода, выделенная полужирным шрифтом, показывает простой SQL-оператор select. В общих чертах, мы просим Oracle возвратить нам все данные изо всех столбцов таблицы ЕМР. В ответ Oracle возвращает содержимое таблицы ЕМР. Основные компоненты оператора select перечислены ниже. Оба эти компонента должны присутствовать в каждом операторе select, задаваемом для базы данных:
Фраза select или column (столбец) В этой фразе содержатся разделенные запятыми имена столбцов или выражения, содержащие данные, которые мы хотим увидеть. В предыдущем запросе был использован специальный символ, называемый групповым символом или маской (*), указывающий, что мы желаем получить данные из всех столбцов таблицы.
Фраза from или table (таблица) Эта фраза указывает Oracle, из какой таблицы следует взять данные
Совет Если оператор вводится непосредственно в SQL*Plus, для завершения оператора SQL используется символ ''точка с запятой " (;). В некоторых ситуациях можно использовать слеш (/), как, например, в пакетных, файлах SQL*Ptus, но при этом следует быть внимательным — слеш в конце оператора, уже завершенного точкой с запятой, приведет к повторному выполнению оператора.
Замечание относительно столбцов и типов данных
Таблицы базы данных Oracle состоят из столбцов, в каждом из которых для каждой строки хранится единица информации. Собранные вместе, эти единицы для одной строки образуют хранящуюся в таблице запись. Рассмотрим первую запись предшествующего блока кода для сотрудника с EMPNO(ID) 7369:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 17-DEC-80 800 20
Каждый столбец идентифицирует какой-нибудь аспект (свойство) этого уникального пользователя. EMPNO обозначает идентификационный номер служащего, ENAME — его имя и т.д. Информация об этом человеке, хранящаяся в каждом столбце, должна соответствовать типу данных, определенному для этого столбца. Например, столбец EMPNO был определен как столбец типа NUMBER (числовой), это означает, что для записей в этом столбце возможны только числовые значения определенного размера. В EMPNO нельзя записать никакую текстовую информацию, дату или любую другую нечисловую информацию, потому что это приведет к нарушению указанного для столбца типа данных. Далее в книге мы будем часто говорить о типах данных столбцов, так что стоит потратить немного времени на усвоение этой фундаментальной концепции. Ниже перечисляются разрешенные в Oracle типы данных столбцов, с которыми мы будем работать чаще других:
• NUMBER Тип данных, используемый для хранения числовых данных. В столбцах этого типа не допускаются дефисы, текст или любая другая нечисловая информация.
• DATE Тип данных, используемый для хранения информации о датах. Во внутреннем представлении Oracle хранит даты как числа, которые могут быть затем конвертированы в любой формат DATE по вашему желанию. По умолчанию информация в формате DATE представляется в формате DD-MON-YY (например, 25-DEC-79).
VARCHAR2 Этот тип данных используется для хранения текстовых данных. В столбце типа VARCHAR2 могут храниться любые текстовые символы (включая спецсимволы, числа, буквы, дефисы и тому подобное).
CHAR Этот тип данных используется для хранения текстовых данных. В столбце типа CHAR могут храниться любые текстовые символы (включая спецсимволы, числа, буквы, дефисы и тому подобное). В том случае, если записанный текст имеет длину, меньшую указанной в определении переменной, он будет дополнен справа пробелами. Следовательно, фамилия SMITH, если ее поместить в столбец, определенный как CHAR(IO), будет дополнена справа пятью пробелами.
Совет Главное различие между столбцами CHAR и VARCHAR2 состоит в том, что размер памяти, требующейся для хранения текстовых данных в столбце CHAR, всегда превышает размер памяти для хранения той же информации в столбце VARCHAR2. Это связано с тем, что столбцы CHAR имеют фиксированную длину и всегда содержат одинаковое количество байтов, в то время как столбцы VARCHAR2 имеют переменную длину и содержат ровно столько байтов, сколько вы предоставили для записи.
В Oracle существуют и типы данных для хранения других типов информации; однако их не так много, как в базах данных других производителей. Например, в Oracle отсутствует тип данных для хранения валют Значения этого типа рассматриваются как простые числа и как таковые их можно хранить в столбцах типа NUMBER.
Совет Еще один тип данных, с которым мы будем время от времени встречаться на страницах этой книги, называется ROWID. Это специальный тип данных, применяемый Oracle для форматирования информации, используемой для отображения физического адреса строки на диске.
"Схема" вещей
Взгляните на следующий блок кода:
SQL> select empno, ename, sal
2 from scott.emp;
EMPNO ENAME SAL
7369 SMITH 800
7499 ALLEN 1600
7521 WARD 1250
7556 JONES 2975
7654 MARTIN 1250
7698 BLAKE 2350
7839 KING 5000
7844 TURNER 1500
1816 ADAMS 1100
7900 JAMES ' 950
7902 FORD 3000
7934 MILLER 1300
Вы обратили внимание на то, каким образом во фразе table реализована ссылка на таблицу ЕМР? В нее в виде префикса включено имя пользователя — SCOTT. Разработчики и АБД Oracle говорят о концепции упоминания имени пользователя вместе с именем таблицы, как о схеме. Если вы создаете такой объект базы данных, как таблица, этот объект принадлежит вам. Он является частью вашей схемы. Идентификационные параметры, используемые вами при входе в базу данных перед выполнением сценария demobld.sql, определяют имя схемы, которой будут принадлежать все эти таблицы.
В том случае, если таблица, на которую вы ссылаетесь в запросе, не имеет префикса в виде имени схемы, которой она принадлежит, Oracle будет считать, что таблица принадлежит вашей схеме, и попытается выполнить запрос именно к ней- Если в вашей схеме такая таблица отсутствует, вы обязаны в качестве ее префикса использовать информацию о схеме, отделяя имя владельца схемы от имени таблицы точкой.
Совет Схемой называется логическое группирование объектов базы данных по имени пользователя, владеющего этими объектами.
-