有一個PLSQL問題想請教各位,請指教哪裡有問題。
我 Cursor c2 中的select distinct 就是想移除重複part,
資料更新的結果如下,為何Part 的 AAA price 會更新三筆為 5,我預期Cursor c2 只要重複part 只要更新一筆price 5 即可。
請各位高手指引方向或是觀念錯誤地方:
Part price custome wip
AAA 5 Nick 1
AAA 5 Eric 10
AAA 5 Jack 20
BBB 7 Edison 30
CCC 5 Candy 100
DDD 4 Connie 1
DDD 4 Lucy 22
程式範例:
CURSOR c1
IS
SELECT part FROM bom_part;
CURSOR c2
IS
SELECT DISTINCT part FROM my_table;
BEGIN
FOR i IN c1
LOOP
SELECT part, pricr, custome, wip FROM bom_part
WHERE i.part = part;
INSERT INTO my_table (part, price, custome, wip) VALUE (i.part, 0, custome, wip);
END LOOP;
FOR i IN c2
LOOP
SELECT price INTO v_price FROM pj_project
WHERE part = i.part
UPDATE my_table
SET price = v_price
WHERE part = i.part
END LOOP;
END;
只要重複part 只要更新一筆price 5 即可。
如果只要更新一筆重覆資料
可以下這樣
--借用antijava 大大的Sql改寫
UPDATE my_table
SET price = 5
WHERE part = "AAA"
and rownum=1 --限定筆數
你所謂的 distinct
是在原來的七筆(AAA(3),BBB,CCC,DDD(2))中
挑出 AAA,BBB,CCC,DDD
而這三列 SQL 指令
<pre class="c" name="code">UPDATE my_table
SET price = v_price
WHERE part = i.part
執行時會將 AAA,BBB,CCC,DDD 分別帶入
執行 AAA 時大概像這樣
<pre class="c" name="code">UPDATE my_table
SET price = 5
WHERE part = "AAA"
那麼
會更新三筆 AAA
是沒錯的
其實你該自己想一下
如果真的只更新一筆的話
以 part="AAA" 這個條件
資料庫他應該替你更新 02,03,04 那一筆呢?
(三筆都符合你的條件)