Как изменить тип данных столбца в Oracle View?

Я пытаюсь изменить тип данных столбца в Oracle View, выполнив следующую инструкцию:

ALTER VIEW <view_name> 
MODIFY (ID VARCHAR2(100));

Я получаю следующую ошибку:

Error starting at line : 1 in command -
ALTER VIEW <view_name>
MODIFY (ID VARCHAR2(100))
Error report -
ORA-00922: missing or invalid option
00922. 00000 -  "missing or invalid option"
*Cause:    
*Action:

Я сослался на сообщение здесь. Каков правильный способ добиться этого? Я предполагаю, что Oracle ожидает ключевое слово CONSTRAINT после MODIFY. Столбец, тип данных которого я изменяю, является одним из первичных ключей в таблице, на которой стоит это представление.


person Nikhil    schedule 20.08.2019    source источник
comment
Вы не можете изменить сообщаемый тип данных представления, как указано в связанном вопросе. Единственный способ добиться этого — использовать соответствующий CAST в источнике представления.   -  person a_horse_with_no_name    schedule 20.08.2019


Ответы (2)


Вы не можете изменить тип данных столбца VIEW.

Вместо этого вы можете изменить тип данных столбца базовой базовой таблицы (в этом случае обратитесь к ответу на ссылку, упомянутую в вашем вопросе), или вы можете создать запрос просмотра с этим типом данных.

-- Your view
CREATE OR REPLACE VIEW <YOUR VIEW> AS
SELECT ID, 
...
FROM <TABLE>;

Вы можете изменить запрос SELECT представления.

CREATE OR REPLACE VIEW <YOUR VIEW> AS
SELECT cast(ID as varchar2(20)) as ID, 
...
FROM <TABLE>;

Надеюсь, это поможет.

Ваше здоровье!!

person Popeye    schedule 20.08.2019

Вы не можете изменить размер столбца представления с помощью ALTER. Вы просто не можете.

Если вы хотите изменить определение вида, вам нужно найти исходное определение и переписать его.

Чтобы найти исходное определение, найдите столбец TEXT или TEXT_VC в USER_VIEWS. Затем используйте CAST, чтобы настроить определение интересующего столбца.

Пример:

SQL> create or replace view V as
  2  select dummy from dual;

View V created.

SQL> desc v;

Name    Null?   Type          
DUMMY            VARCHAR2(1)    

SQL> select text_vc from user_views where view_name = 'V';

TEXT_VC       
----------------------
select dummy from dual    


SQL> create or replace view V as 
  2  select cast(dummy as varchar2(100)) dummy from dual;

View V created.

SQL> desc v;

Name    Null?   Type            
DUMMY           VARCHAR2(100) 

С наилучшими пожеланиями,

Стью Эштон

person Stew Ashton    schedule 20.08.2019