Oracle 更改表将列从 NVARCHAR2 修改为 VARCHAR2

Joo*_*gen 4 oracle

将一列FIRSTNAME NVARCHAR2(30)从 VARCHAR2(30) 转换为

alter table ANGESTELLTER modify FIRSTNAME NVARCHAR2(30) -- worked!
Run Code Online (Sandbox Code Playgroud)

我试图恢复原来的。然而

alter table ANGESTELLTER modify FIRSTNAME NVARCHAR2(30) -- fails!
Run Code Online (Sandbox Code Playgroud)

给出一个 Ora-01439 错误,该值必须为空。

先引入新列FIRSTNAME2 VARCHAR2(30),复制重命名没有成功,可能是Oracle经验失败?

小智 6

请试试这个,它对我有用。希望对你有帮助。

CREATE TABLE TEST_1
(
FIRSTNAME VARCHAR2(30)
);

INSERT INTO TEST_1(FIRSTNAME)
VALUES('NARENDRA');

COMMIT;

ALTER TABLE TEST_1
MODIFY FIRSTNAME  NVARCHAR2(30);

--Gives Error while modifying
/*ALTER TABLE TEST_1  MODIFY FIRSTNAME  VARCHAR2(30);8*/

ALTER TABLE TEST_1
ADD (FIRSTNAME2 VARCHAR2(30)
);


UPDATE TEST_1
SET FIRSTNAME2= substr(FIRSTNAME,1,30)

COMMIT; 

ALTER TABLE TEST_1
DROP COLUMN FIRSTNAME;  

ALTER TABLE TEST_1
RENAME COLUMN FIRSTNAME2 TO FIRSTNAME;
Run Code Online (Sandbox Code Playgroud)