如何更改 Oracle View 中的列数据类型?

How to change a column data type in Oracle View?

我正在尝试通过执行以下语句更改 Oracle 视图中列的数据类型:

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:

我参考了post。实现这一目标的正确方法是什么?我猜 Oracle 在 MODIFY 之后需要 CONSTRAINT 关键字。我正在修改其数据类型的列是此视图所在的 table 中的主键之一。

您不能使用 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) 

此致,

炖阿什顿

您不能更改 VIEW 的列数据类型。

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

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

希望这会有所帮助。

干杯!!