Oracle中使用alter column修改数据类型报错

DaDaYi_ 2017-10-26 09:09:17
为什么在Oracle中使用alter column修改数据类型报错?怎么样解决?
查资料后有大神说是因为在修改数据类型时,如果是小类型修改为大类型,不会报错;如果是大类型修改为小类型,则应先清除掉修改的字段的值
问题一:如果如上述所诉,char类型和varchar数据类型大小不一致吗?
问题二:清楚修改的字段的值使用update语句,但是我刚创建的表,表中并没有数据,应该清除什么字段呢?
命令行如下:

SQL> create table course2(
2 cno char(2) primary key,
3 cname char(14) not null,
4 cpno char(2),
5 ccredit number(1) not null,
6 foreign references course2(cno)
7 );

表已创建。

SQL> insert into course2 values('2','数学',' ','2');
insert into course2 values('2','数学',' ','2')
*
第 1 行出现错误:
ORA-00947: 没有足够的值


SQL> insert into course2 values('2','数学','2','2');
insert into course2 values('2','数学','2','2')
*
第 1 行出现错误:
ORA-00947: 没有足够的值


SQL> alter table course2 alter column sname varchar(14);
alter table course2 alter column sname varchar(14)
*
第 1 行出现错误:
ORA-01735: 无效的 ALTER TABLE 选项


求大神仔细回复,感谢



...全文
1282 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2017-10-27
  • 打赏
  • 举报
回复
在插入数据时之所以一直报错,是因为你建的表结果有问题。 你可以看一下你创建的这个表的定义,就会发现,神奇的多了一列: "FOREIGN" CHAR(2 BYTE),所以才会一直报错 :没有足够的值。 create table course2( cno char(2) primary key, cname char(14) not null, cpno char(2), ccredit number(1) not null, foreign references course2(cno) 这个要指定你的外键是哪一列,而不仅仅指定要引用的同一个表的主键cno列 ); 应该是 xx列 类型 foreign references course2(cno) 中间不能有逗号
  • 打赏
  • 举报
回复
你6个字段 插入3个值肯定是要报错的。 alter table course2 alter column sname varchar(14) 这个是mssql的语法
minsic78 2017-10-27
  • 打赏
  • 举报
回复
文字部分看不懂 问题是不是后面代码部分报错ORA-00947?那是因为你没有在values子句里输入足够的字段值导致的,总共5个字段,你只输入了3个值,不要说只需要三个非空值(主键+量个not null字段),你必须在前面指定字段名,并在后面values子句的每个值与之前列的字段一一对应,这才是正确的语法,当然,对应的值应该满足字段上的约束,比如: insert into course2 (cno,cname,ccredit) values ('2','maths','2');
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
请看下面的回复,并认真思考下自己的问题:

--1.为什么在Oracle中使用alter column修改数据类型报错?怎么样解决?
修改字段的语法:alter table tablename modify (column datatype [default value][null/not null],….);

--2.问题一:如果如上述所诉,char类型和varchar数据类型大小不一致吗?
char和varchar两种数据类型可以兼容。之后所有报错,是因为长度大小不一致。 长度改小肯定报错。

--3.问题二:清楚修改的字段的值使用update语句,但是我刚创建的表,表中并没有数据,应该清除什么字段呢?
--操作步骤如下:
--(1)先备份原表
create table course2_bak as select * from course2;

--(2)清空原表数据
truncate table course2;

--(3)修改原表字段
alter table course2 modify column sname varchar2(14);

--(4)还原数据
insert into course2 select * from course2_bak;
commit;

--4.第 1 行出现错误: ORA-00947: 没有足够的值
course2表总共4个字段,你才给3个字段赋值,肯定报错啊。
卖水果的net 2017-10-26
  • 打赏
  • 举报
回复
增加列 alter table t add 。。。 修改列 alter table t modify。。。
DaDaYi_ 2017-10-26
  • 打赏
  • 举报
回复
因为问题没有查到明确的答案,才匆匆忙忙注册的新账号...不太会用...
OwenZeng_DBA 2017-10-26
  • 打赏
  • 举报
回复
发错板块了,应该去对应的板块

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧