Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 更改包含数据的表中列的大小_Sql_Oracle - Fatal编程技术网

Sql 更改包含数据的表中列的大小

Sql 更改包含数据的表中列的大小,sql,oracle,Sql,Oracle,可能重复: 在Oracle中(9i及以上版本) 我想将表employee的列ename从varchar2(30)改为varchar2(10) 案例1:如果表中的数据具有包含长度小于10个字符的值的ename列(我的意思是它可以轻松地放入varchar2(10)),oracle是否允许这样做 案例2:如果表中的数据的ename列包含长度大于10个字符的值(我的意思是它不能放入varchar2(10))-oracle不允许这样做吗 案例1:是的,这很好用 案例2:这将失败,错误为ORA-0144

可能重复:

在Oracle中(9i及以上版本)

我想将表employee的列ename从varchar2(30)改为varchar2(10)

  • 案例1:如果表中的数据具有包含长度小于10个字符的值的ename列(我的意思是它可以轻松地放入varchar2(10)),oracle是否允许这样做

  • 案例2:如果表中的数据的ename列包含长度大于10个字符的值(我的意思是它不能放入varchar2(10))-oracle不允许这样做吗


案例1:是的,这很好用

案例2:这将失败,错误为ORA-01441:无法减少列长度,因为某些值太大


分享和享受。

我不确定自己是否理解问题所在。如果您试图将列的大小减小到
VARCHAR2(10)
,对于具有20字节
ENAME
值的员工,您希望发生什么?是否要截断第10个字节后的数据?类似于@Justin Cave。。。是的,我对此没有任何问题……因为很明显,如果我将大小更改为varchar2(10)…数据将被截断为具有20字节的ENAME…oracle是否会对此更改发出某种类型的警告或执行此操作否,您的数据不能大于列中某列的大小。否则有什么意义?如果您的数据确实大于列的大小,为什么要减小它?@jain007:我认为
XQBERT
提到的链接解决了您的问题,首先将所有数据超过10字节的列更新为10字节,然后更改您的列…如果我需要案例2工作,然后我需要接着是xQbertYes-您需要截断任何长度大于要将列收缩到的大小的值。或者更好,研究截断该数据的影响。如果你能做一个过程,让信息像以前一样丰富,那么就去做吧。例如,将关键字转换为它们的简短版本。e、 g:示例->例如,如果没有研究影响,则丢弃信息是不好的。
 Alter table employee  
 MODIFY ename varchar2(10);