Позиция, позиция, позиция
Как Oracle узнает, какие столбцы следует заполнять и какими данными? Ответ простой — расположение. Расположение может влиять на таблицы в базе данных Oracle; расположение данных в операторе insert должно соответствовать расположению столбцов таблицы. Пользователь может определить порядок размещения столбцов в таблице, используя команду describe или выходные данные словарного представления USER_TAB_COLUMNS, упорядоченные по столбцу COLUMN_ID с помощью фразы order by. Порядок, в котором перечислены столбцы команды describe, — это тот порядок, в котором должны быть расположены значения, подлежащие вставке в таблицу, если не были явно указаны имена столбцов таблицы. Взгляните сами:
SQL> select column_name, column_id
2 from user_tab_columns
3 where table_name = 'EMPLOYEE'
4 order by colurnn_id;
COLUMN_NAME COLUMN__ID
EMPID 1
LASTNAME 2
FIRSTNAME 3
SALARY 4
HIRE_DATE 5
DEPT 6
SQL> describe employee
Name Null? Type
EMPID NOT NULL VARCHAR2(5)
LASTNAME NOT NULL VARCHAR2(25)
FIRSTNAME VARCHAR2(25)
SALARY NUMBER(10,4)
HIRE_DATE DATE
DEPT VARCHAR2(10)
Нельзя не отметить, что вставить в требующийся столбец данные требующегося типа, используя совпадение положения значения в списке значений с положением столбца в списке столбцов, не так легко, как кажется. Если тип добавляемых в столбец данных не совпадает с типом данных, определенным для таблицы, Oracle возвратит сообщение об ошибке. Посмотрим, что получится, если мы попытаемся включить в столбец типа NUMBER текстовую информацию:
SQL> insert into emp (empno, ename, sal)
2 values ('SMITHERS’, 7444, 900);
values ('SMITHERS',7444,900)
ERROR at line 2; ORA-01722: invalid number
(недопустимое число)
К счастью, Oracle извещает нас о несовпадении типов данных, так что мы можем выполнить корректировку вводимых данных. Но не всегда мы оказываемся такими счастливчиками, особенно в тех случаях, когда тип вводимых данных совпадает с тем типом, который Oracle ожидает для этого столбца, но сами данные тем не менее некорректны. Вот еще один пример, в котором мы случайно добавляем в таблицу ЕМР новую запись, где информация о работе ошибочно помещается в столбец ENAME:
SQL> insert into emp (empno, ename, job, sal) 2 values (7444, 'LACKEY’, 'SMITHERS', 900);
1 cow created.
Мы с вами знаем, что LACKEY не является именем этого служащего, а его (или ее) должность никоим образом не называется SMITHERS. Однако Oracle не выработает сообщения об ошибке, так что если вы не будете внимательны, вы постоянно будете загружать в свои таблицы массу никому не нужной информации. Итак, мораль этой истории такова: будьте внимательны при включении в таблицу новых записей, чтобы избежать ошибок, но будьте трижды внимательны, чтобы избежать проблем при включении данных, которые не вызывают ошибки, но при этом неверны контекстуально.
Дата добавления: 2015-08-21; просмотров: 576;