2010-08-25 91 views
0

我想在某些不存在數據的字段中輸入相同的值,因爲我需要查詢每個字段並查看數據是否存在並據此放置數據,或者有其他一些工作。初始化某些數據,如果數據不存在於某些字段

Name Age City 
N  22  J 
K    K 
      23  L 

在這裏,我要穿上它沒有數據,否則我不想碰tghose領域的這些字段的數據。插入後應該看起來像

Name Age City 
N  22  J 
K  Gar  K 
Gar  23  L 

沒有對數據類型的驗證,都是相同的數據類型。我應該如何寫在這種情況下,查詢..

回答

0

如果你只是想爲表中的所有行,你可以這樣做

UPDATE your_table 
    SET name = NVL(name, 'Gar'), 
     age = NVL(age, 'Gar'); 

做這個假設「年齡」是一個字符字段。

分享和享受。

+1

請注意,如果您在大型表上執行此操作,它將更新這兩個字段,併爲表中的每一行生成重做。我會添加'WHERE名稱是空的或年齡是空'。 – 2010-08-25 15:28:44

+0

此查詢正在爲我工​​作... – Nits 2010-08-27 10:47:43

2
select NVL(name, 'Gar'), NVL(age, 'Gar'), city from your_table; 
+0

我要尋找更新不選擇 – Nits 2010-08-25 14:20:44

+0

你打我吧,所以我就添加註釋:如果你有興趣在堅持* *默認值,繼續使用'UPDATE SET Name ='Gar'WHERE Name IS NULL' ... – kbrimington 2010-08-25 14:20:48

+0

@kbrimington如何去超過一個字段,我不能使用OR甚至沒有,如何做到這一點然後... – Nits 2010-08-25 14:23:03

0

你這樣做嗎?

創建測試表...

create table test_table(Name VARCHAR2(10), Age NUMBER(10), City VARCHAR2(10)); 

插入樣本數據...

insert into test_table(Name, Age, City) values('N', 22, 'J'); 
insert into test_table(Name, Age, City) values('K', NULL, 'K'); 
insert into test_table(Name, Age, City) values(NULL, 23, 'L'); 
commit; 

數據是這樣的......

SQL> select * from test_table; 

NAME    AGE CITY 
---------- ---------- ---------- 
N     22 J 
K      K 
        23 L 

最後編程方式更新樣本數據使用CASE語句...

update test_table 
    set Name = (CASE WHEN Name IS NULL AND Age >= 23 THEN 'John' ELSE Name END) 
    ,Age = (CASE WHEN Age IS NULL AND Name = 'K' THEN 21 ELSE Age END) 
; 
commit; 

3 rows updated 

,現在的數據是這樣的......

SQL> select * from test_table; 

NAME    AGE CITY 
---------- ---------- ---------- 
N     22 J 
K     21 K 
John    23 L 
相關問題