如何在Oracle视图中更改列数据类型?

5
我尝试通过执行以下语句更改Oracle视图中列的数据类型: ```sql ALTER VIEW my_view MODIFY COLUMN my_column new_data_type; ```
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在MODIFY之后需要加上CONSTRAINT关键字。我需要修改的这一列是该视图所在表的主键之一。


3
无法更改视图报告的数据类型 - 正如链接问题中所述。唯一的方法是在视图源中使用适当的CAST来实现这一点。 - user330315
2个回答

11

您无法更改视图的列数据类型。

相反,您可以更改基础基表列的数据类型(在这种情况下,请参考您问题中提到的链接的答案),或者您可以使用该数据类型创建一个视图查询。

-- 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>;

希望这有所帮助。

加油!!


7

使用 ALTER 无法更改视图的列大小。这是肯定不行的。

如果要更改视图定义,您需要找到原始定义并重写它。

要查找原始定义,请在 USER_VIEWS 中查找 TEXT 或 TEXT_VC 列,然后使用 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) 

此致敬礼,

Stew Ashton


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接