2015年5月27日

[ORACLE] UPDATE時 撘配EXISTS關鍵字

有時UPDATE時 會用到子查詢


update member
set  unit =(select unit from member_sync
where member.oid = member_sync.oid
and member.unit <>member_sync.unit)


腦中覺得  這樣下 就是update member裡的unit 和member_sync 有同樣oid 但unit不同的資料們

but~~~~

這樣下完  會整張member的unit都被update了 而且欄位還都變成null..........



google後 看到 http://www.techonthenet.com/oracle/update.php
寫說要加上"EXISTS"

You may wish to update records in one table based on values in another table. Since you can't list more than one table in the Oracle UPDATE statement, you can use the Oracle EXISTS clause.


所以寫法就變成
update member
set  unit =(select unit from member_sync
where member.oid = member_sync.oid
and member.unit <>member_sync.unit)

WHERE EXISTS (select unit from member_sync
where member.oid = member_sync.oid
and member.unit <>member_sync.unit)


原因在http://blog.xuite.net/twoli1102/work/65466674-Update%E8%AA%9E%E5%8F%A5%E5%84%AA%E5%8C%96
裡提到
Update語句的原理是先根據where條件查到資料後,如果set中有子查詢,則執行子查詢把值查出來賦給更新的欄位,執行更新。

 如:
update 表a set a.欄位1 = (select b.欄位1 from 表b where a.欄位2=b.欄位2) where exists(select 1 from 表b where a.欄位2=b.欄位2)。

查表a的所有資料,迴圈每條資料,驗證該條資料是否符合exists(select 1 from 表b where a.欄位2=b.欄位2)條件,如果是則執行(select b.欄位1 from 表b where a.欄位2=b.欄位2)查詢,查到對應的值更新a.欄位1中。
關聯表更新時一定要有exists(select 1 from 表b where a.欄位2=b.欄位2)這樣的條件,否則將表a的其他資料的欄位1更新為null值。




2015年5月8日

[日文] 點餐 (2015 05.08更新)

リゾット →燉飯(Risotto)

ボルシチ→羅宋湯(ウクライナ語: борщ, [ボールシュチュ]; 意訳:「紅汁」)(Borscht)

カルボナーラ→培根蛋奶麵 (Carbonara)

マカロニ→通心粉(英語:macaroni)

ラザニア→千層麵(単数形: lasagna、複数形: lasagne、ラザニエ)

ジェノベーゼ→青醬(ペスト・ジェノヴェーゼ)

スンドゥブチゲ→韓式豆腐鍋

ロース→里肌肉,肉質比較肥嫩多筋

ひれかつ→腰內肉,肉質比較乾酥(瘦)少筋




網路ATM 安裝鬼打牆

使用網路ATM 會一直跳出下載安裝元件

但~~我明都裝了元件 還一直跳出來要下載安裝

解法 :chrome://flags/#enable-npapi

選啟用

2015年5月6日

ORA-00911:字元無效

sql直接貼在sqldeveloper 不會出錯
但在程式跑 就是一直出現

有很大原因是因為sql裡有分號

網路上大部份解決是把多句的select 後面的分號拿掉就好


but 他會換ORA-00933: SQL 命令未正確結束.........或是其他奇奇怪怪


解法:在前後加上begin和end就好了


begin
update member set code='123';
update vip set sn='223';
end;