【原】Oracle 如何修改列的数据类型

这是一个陷阱。
直接使用 ALTER TABLE 更改数据类型可能会导致数据丢失。
2 02 0年,该公司未能验证数据兼容性。
结果ALTER TABLE改变数据类型后,大量数据变成了NULL,损失严重。

实用提醒:在ALTER TABLE之前,请确保所有数据都与新类型匹配,如有必要,请导出数据的备份副本。

oracle数据库怎么修改字段

嘿,Oracle真是一个难以抉择的事情。

你想换个领域,对吧?只需使用 ALTERTABLEMODIFY 即可。

例如,如果您要更改 Accounts 表的 full_name 字段。

您希望此字段保持隐藏吗? ALTERTABLEaccountsMODIFYfull_nameINVISIBLE;
注意,这需要 Oracle1 2 c 或更高版本,而不是早期版本。

您希望此内容再次出现吗? ALTERTABLEaccountsMODIFYfull_nameVISIBLE;
很简单。

此外,例如,如果您希望电子邮件字段不为空,则它必须有一个值。

好的,首先检查account表中的email字段是否有空数据。

有人在吗?例如,检查 SELECTemailFROMaccountsWHEREemailISNULL;
如果发现,则需要先更改它们。

使用UPDATE语句,例如:
sql 更新帐户 设置电子邮件 = 底部(名字 || '.' || 姓氏 || '@oraok.com') 其中电子邮件为空;
此更新需要运行。

进行更改后,执行 ALTERTABLE 语句:
sql ALTER TABLEAccountsModifiedEmailVARCHAR2 (1 00)NOTNULL;
就做吧。

如果不先处理NULL值就直接更改,Oracle会爆炸并报ORA-02 2 9 6
记住这一点。

此外,例如,您想要将电话字段从 1 2 个字符更改为 2 4 个字符。

就这样做:
sql 可修改帐户ModifyPhoneVARCHAR2 (2 4 );
没问题。

但是如果你走另一条路,想要将2 4 转换为1 2
首先确保表中phone字段的所有数据不超过1 2 个字符。

例如,如果有人保存了它,则它有一个国际拨号代码,例如 +8 6 等。

那么你必须先去掉这个极长的数据。

使用更新,例如:
sql 帐户更新做 设置电话 = 替换(电话, '+8 6 ', '');
杀死所有人+8 6
然后更改字段的长度:
sql 可修改帐户ModifyPhoneVARCHAR2 (1 2 );
来吧。

虚拟专栏,这个你要注意了。

例如,根据表达式计算虚拟列full_name的值。

您想要更改其表达式,例如更改first_name和last_name的顺序。

原始表达式可能是名字||' '||姓氏。

您想将其更改为姓氏||','||名字。

那么你必须这样做:
sql ALTERTABLEACCOUNTMODIFYfull_nameVARCHAR2 (5 2 )GENERATEDALWAYSAS(last_name||','||first_name);
请注意,必须在此处指定长度,并且可能需要更改。

添加一个默认值,也很简单。

例如,将“状态”列添加到“帐户”表中。
默认值为 1
sql ALTERTABLEACCOUNTADDstatusNUMBER(1 ,0)DEFAULT1 NOTNULL;
这很容易。

我想将来更改默认值,例如0。

只需这样更改:
sql ALTER TABLEAccountsModifiedStatusDEFAULT0;
简单。

更改多个字段,可以一次更改多个字段。

例如,您要将电话长度更改为 2 0,并将电子邮件的默认值更改为“unknown@oraok.com”。

一行完成此操作:
sql ALTERTABLEaccountsMODIFY(phoneVARCHAR2 (2 0),emailDEFAULT'unknown@oraok.com');
就做吧。

这些操作需要注意版本,比如列可见性,需要1 2 c以上。

您还必须注意数据兼容性。
不要更改数据,否则会遇到麻烦。

小心点。