Лекция: Позиция, позиция, позиция

Как 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 не выработает сообщения об ошибке, так что если вы не будете внимательны, вы постоянно будете загружать в свои таблицы массу никому не нужной информации. Итак, мораль этой истории такова: будьте внимательны при включении в таблицу новых записей, чтобы избежать ошибок, но будьте трижды внимательны, чтобы избежать проблем при включении данных, которые не вызывают ошибки, но при этом неверны контекстуально.

еще рефераты
Еще работы по истории