2015-11-11 50 views
-1

我創建簡單的表表不能爲我的情況下被更新

create table test(
name char(8), 
name2 varchar2(8) 
); 

...我插入到表中的值...

insert into test values('ABC',NULL); 

在這一點上,我試着更新我插入的值...

update test 
set name2 = 'ABC' 
where name = 'ABC'; 

...但我的查詢不起作用,因爲我打算。它說:更新了0行。

爲什麼它沒有更新?

+1

你提交的原始插入?與插入操作相同的會話中是否有更新? – Ollie

+0

@kevinsky,很好的地方,@ user3881015是否有任何特定的原因使用'CHAR'而不是'VARCHAR2'作爲你的第一列? – Ollie

+4

名稱不能包含「ABC」,因爲它是一個CHAR(8)或8個字符的字符串。當你插入ABC''時,Oracle存儲''ABC''和'ABC'<>'ABC'',所以更新不會更新。 –

回答

2

嘗試這一切在一個去運行一個腳本(和使用VARCHAR2爲兩列,除非你真的需要使用CHAR):

create table test(name varchar2(8) name2 varchar2(8)) 
/

insert into test values('ABC', NULL) 
/

update test set name2 = 'ABC' where name = 'ABC' 
/

如果類似的輸出返回到:

Table created 
1 row inserted 
1 row updated 

然後這是一個會議問題。

表的創建是DDL,但插入和後續更新都是DML,並且需要承諾被數據庫中的其他會話「看到」。即:

create table test(name varchar2(8) name2 varchar2(8)) 
/

insert into test values('ABC', NULL) 
/

commit 
/

然後在另一個會話可以發出:

update test set name2 = 'ABC' where name = 'ABC' 
/

commit 
/

希望它可以幫助

相關問題