СообЧа > База Знаний > Базы данных > Oracle

Вопрос

Как создать средствами Оracle курсор/временную табличку, в которую можно не только поместить select * from table1, но и добавлять записи, изменять некоторые поля?

Ответ

Можно создать представление (VIEW):
если запрос будет типа SELECT * FROM TABLE, то он по умолчанию становится обновляемым и его можно обновлять. Если запрос будет ограничен условиями, то, соответственно, и вставляемые и изменяемые данные тоже будут подвергаться проверке.

Представление является необновляемым, если в процессе создания представления использовались следующие операции:

* операции над множествами (UNION, UNION ALL, INTERSECT или MINUS)
* оператор DISTINCT
* групповые функции, такие как AVG, COUNT, MAX, MIN и т.д.
* предложения GROUP BY, ORDER BY, CONNECT BY или START WITH
* ссылка на выражение в списке SELECT
* подзапрос в списке SELECT
* запрос соединения (JOIN)

Если запрос сложный, например:

SELECT a.ID, a.DATE, b.CLIENT_ID, b.SUMMA
from table1 a,
table2 b
where a.id = b.id

то в данном случае обновляемыми полями будут 3 и 4.

Базовая таблица представления считается защищенной по ключу (key-preserved), если каждое значение первичного или уникального ключа базовой таблицы также является уникальным в результирующем множестве, выбираемом представлением с соединением — другими словами, если сущностная целостность базовой таблицы сохраняется представлением с соединением.

Просмотреть информацию о допустимых для обновления столбцах можно через представление USER_UPDATABLE_COLUMNS словаря данных:

SELECT column_name,
updatable,
insertable,
deletable FROM user_updatable_columns
WHERE table_name = 'MAIL_LABELS';



Copyright © 2000-2004 Сообщество Чайников
Контактная информация