為什么在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 選項
求大神仔細回復,感謝
uj5u.com熱心網友回復:
發錯板塊了,應該去對應的板塊uj5u.com熱心網友回復:
因為問題沒有查到明確的答案,才匆匆忙忙注冊的新賬號...不太會用...uj5u.com熱心網友回復:
增加列alter table t add 。。。
修改列
alter table t modify。。。
uj5u.com熱心網友回復:
請看下面的回復,并認真思考下自己的問題:
--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個欄位賦值,肯定報錯啊。
uj5u.com熱心網友回復:
文字部分看不懂
問題是不是后面代碼部分報錯ORA-00947?那是因為你沒有在values子句里輸入足夠的欄位值導致的,總共5個欄位,你只輸入了3個值,不要說只需要三個非空值(主鍵+量個not null欄位),你必須在前面指定欄位名,并在后面values子句的每個值與之前列的欄位一一對應,這才是正確的語法,當然,對應的值應該滿足欄位上的約束,比如:
insert into course2 (cno,cname,ccredit) values ('2','maths','2');
uj5u.com熱心網友回復:
你6個欄位 插入3個值肯定是要報錯的。 alter table course2 alter column sname varchar(14) 這個是mssql的語法uj5u.com熱心網友回復:
在插入資料時之所以一直報錯,是因為你建的表結果有問題。你可以看一下你創建的這個表的定義,就會發現,神奇的多了一列: "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)
中間不能有逗號
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/80567.html
標籤:基礎和管理
