有一個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 那一筆呢?
(三筆都符合你的條件)