
- •Обзор баз данных Oracle
- •Обзор Oracle
- •Теоретические и физические аспекты реляционных баз данных
- •Рсубд против систем плоских файлов: быстрое ознакомление
- •Закрепление пройденного материала
- •Упражнения
- •Реализации рсубд и орсубд Oracle
- •Дисковые компоненты Oracle
- •Процесс сервера и фоновые процессы Oracle
- •Что такое орсубд
- •Закрепление пройденного материала
- •Упражнения
- •Использование и преимущества pl/sql
- •Закрепление пройденного материала
- •Упражнения
- •Написание основных операторов sql
- •Возможности операторов sql select
- •Познакомьтесь: sql* Plus
- •Закрепление пройденного материала
- •Упражнения
- •Выполнение операторов select
- •Задание префиксов столбцам по имени таблицы
- •Арифметические данные и данные из таблиц
- •Старшинство операторов
- •Обработка значений null
- •Замена заголовков столбцов псевдонимами
- •Объединение столбцов с помощью конкатенации
- •Закрепление пройденного материала
- •Упражнения
- •Различия между командами sql и sql*Plus
- •Использование текстового редактора
- •Запись команд sql в сценариях
- •Другие команды sql*Plus, о которых следует знать
- •Закрепление пройденного материала
- •Упражнения
- •Резюме Обзора баз данных Oracle
- •Двухминутное погружение в пройденное
- •Вопросы для самопроверки
- •Вопросы ко всей теме
Различия между командами sql и sql*Plus
Хотя рабочая среда SQL*Plus прекрасно работает в том случае, если вы не делаете ошибок, она не прощает опечаток, начиная с того момента, как вы нажали на клавишу Enter, чтобы перейти к следующей строке ввода. До сих пор это ограничение не предоставляло нам особых трудностей, так как наши запросы не были длинными. Однако, по мере того как запросы становятся все более и более сложными, вы все чаще остаетесь разочарованными. SQL*Plus допускает некоторую коррекцию введенных операторов с помощью специальной команды, которая называется change (сокращенно — с). Рассмотрим следующий пример, иллюстрирующий этот момент: _•
SQL> SELECT empno, ename, MVL(mgr,'none') mgr,
hiredate, sal, comm, deptno
FROM EMP;
SELECT empno, ename, NVL (mgr, ' none') mgr,
*
ERROR at line 1:
ORA-Q1722: invalid number (неверное число}
SQL> 1
1SELECT empno, ename, NVL (mgr, 'none') mgr,
SQL> c/'none'/0
1 SELECT empno, ename, NVL(mgr,0) mgr,
SQL> /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-S1 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-31 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2650 30
7782 CLARK MANAGER 7839 09-JUNE-81 2450 10
7789 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 0 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876—ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK ^698 03-DEC-81 950 30
7902 FORD ANALYST 7556 03-DEC-81 3000 20
793-5 MILLER CLERK 7782 23-JAN-82 1300 10
В этом примере оператор select содержит ошибку, связанную с несовпадением типов данных в функции nvl ( ). Oracle замечает эту ошибку и предупреждает о ней выдачей сообщения ORA-01722,
Могут быть произведены и другие сообщения об ошибках, в том числе и следующее:
ОRA-00904: invalid column name
Эта ошибка означает, что столбца, на который вы ссылаетесь, не существует или его имя было каким-либо образом искажено. Для разрешения этой проблемы вы должны проверить фразу column на предмет наличия в ней опечаток и убедиться, что столбец с таким именем действительно существует в таблице. Иногда в имени столбца могут встречаться такие не буквенно-цифровые символы, как подчеркивания, предназначенные для разделения слов. Следовательно, имя столбца EMPNO совсем не то же самое, что EMP_NO, хотя в концептуальном смысле оба они значат примерно одно и то же.
ORA-00923: FROM keyword not found where expected
Эта ошибка означает, что ключевое слово from не было включено или было записано неправильно. Иногда эта ошибка появляется, если вы поставили запятую после имени последнего столбца, перечисленного во фразе select (например, select empno, ename, from emp), так что в первую очередь проверьте оператор на наличие этой распространенной ошибки.
ORA-00942: table or view does not exist
Эта ошибка означает, что набранного вами имени таблицы или представления не существует. Обычно ошибка ORA-00942 означает, что в имени таблицы или представления имеется опечатка или что перед именем таблицы не было специфицировано имя схемы. Эта ошибка исправляется либо путем исправления допущенной в имени опечатки, либо путем указания перед именем таблицы имени схемы. (Альтернативным решением последней проблемы является создание синонимов для таблиц, к которым могут обращаться другие пользователи. Это решение будет обсуждаться в этой книге позже,)
В любом случае метод, используемый для решения проблемы опечаток, состоит в том, что сначала нужно ввести номер строки, содержащей ошибку, чтобы сделать возможным ее редактирование. В предыдущем примере мы сделали это, набрав число 1 (выделено полужирным шрифтом). Затем мы использовали команду change (также выделена полужирным шрифтом) и ввели с ее помощью правильный синтаксис:
с/старое_значение/новое_значение
После того как выполнено требующееся изменение в первом вхождении старого _значения текущей строки, Oracle повторно выводит текущую строку со сделанными изменениями. Обратите внимание, что изменения производятся только для первого вхождения старого_значения. Если изменения должны быть сделаны в конкретном месте строки, следует задать больше символов в параметре старое_значение. Наконец, откорректированный текст может быть выполнен повторно, для чего достаточно ввести в строке приглашения слеш (/), как это было показано в приводившемся примере, или в командной строке SQL*PJus ввести команду run.
Совет Если у вас есть сомнения по поводу разницы между использованием слеша и точки с запятой, помните, что команда слеш повторно выполняет код, в данное время находящийся в операционном буфере SQL *Plus, в то время как точка с запятой используется для завершения SQL-оператора, который вы набираете в буфер.