Как я могу проверить порядок зависимостей типа, чтобы удалить их и заменить / изменить исходный тип? - PullRequest
5 голосов
/ 12 апреля 2010

Я попытался изменить тип, используя следующий код, и он дал мне код ошибки: ' ORA-02303 '. Я мало что знаю об Oracle или PL / SQL, но мне нужно решить эту проблему; поэтому я буду признателен за дальнейшую помощь в этом.

Спасибо заранее. Код является лишь примером. Но опять же, мне нужно сначала проверить его иждивенцев.

create or replace type A as object (
  x_ number, 
  y_ varchar2(10),
  member procedure to_upper
);
/

Ответы [ 5 ]

4 голосов
/ 13 апреля 2010

Посмотрите на DBA_DEPENDENCIES, ALL_DEPENDENCIES, or USER_DEPENDENCIES в зависимости от ситуации:

SELECT OWNER, NAME, TYPE
  FROM DBA_DEPENDENCIES 
 WHERE REFERENCED_OWNER = [type owner]
   AND REFERENCED_NAME  = [type name]
   AND REFERENCED_TYPE  = 'TYPE'
/
3 голосов
/ 22 октября 2013

Не используйте DROP с FORCE, так как он автоматически изменяет таблицы (удаляет столбцы), и бог знает, что еще нужно проверить все.Используйте что-то вроде:

ALTER TYPE type_name DROP ATTRIBUTE attr_name INVALIDATE;
ALTER TYPE type_name ADD ATTRIBUTE attr_name varchar2(50) CASCADE;

Это будет работать для типов с зависимостями таблиц / типов.

2 голосов
/ 13 апреля 2010

Если вы использовали тип в таблице, вы сможете увидеть его с помощью запроса вроде:

select * from all_tab_columns
where data_type_owner not in ('SYS');

Но я бы начал с предложения Алекса использовать ALTER TYPE

1 голос
/ 13 апреля 2010

Я уверен, что он где-то есть в словаре данных, но не уверен, где его нет; и у вас, вероятно, будет много зависимостей, которые нелегко разрешить. Но вместо этого вы можете изменить существующий тип: http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_4002.htm

Существует также опция FORCE, но она все равно может сделать недействительными зависимые объекты.

0 голосов
/ 11 января 2012

Это вызвано базовыми ограничениями в Oracle, еще одной причиной не использовать типы оракула в базе данных.

Для зависимостей «TYPE» вы можете:

  1. DROP TYPE mytype FORCE;
  2. Затем заново создайте тип mytype и введите body
  3. Затем DROP TYPE mytype_dependent FORCE;
  4. Затем заново создайте тип и тип тела mytype_dependent.
  5. Повторите для всех зависимых и ссылочных типов.

Примечание. Пункты 3..5 являются обязательными, поскольку зависимые типы не могут автоматически перекомпилироваться или компилироваться вручную «на месте».

Для зависимостей 'TABLE' вы должны:

Используйте руководство в статье здесь, где говорится о трех соответствующих сценариях.

ORA-02303: невозможно удалить или заменить тип с зависимостями типа или таблицы

из Летописи невероятных ошибок Oracle blog

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...