2016-02-20 74 views
-2

我是這個論壇和oracle pl/sql的新手。自從前幾天我一直在做一些pl/sql任務。其中一項任務是更新修訂金額列中的金額值。我正在使用遊標方法執行此任務。使用日期名稱值的更新表 - Oracle pl/sql

我需要+10(星期一)+20(星期二)..等更新修訂後的金額列的值..

我面臨更新修訂後的量的問題。

請檢查下面的代碼。

create or replace procedure team2 
as 
    cursor c1 is select amount, day_name from football; 
    v_amount football.amount%type; 
    v_day football.day_name%type; 
begin 
    if c1%isopen then 
    close c1; 
    end if; 

    open c1; 
    loop 
    fetch c1 into v_amount, v_day; 
    exit when c1%notfound; 

    if v_day = 'monday' then 
     update football set revised_amount = v_amount+10 where day_name = v_day ; 
    elsif v_day = 'tuesday' then 
     update football set revised_amount = amount+30 where day_name = v_day ; 
    elsif v_day = 'wednesday' then 
     update football set revised_amount = amount+40 where day_name = v_day ; 
    elsif v_day = 'thursday' then 
     update football set revised_amount = amount+50 where day_name = v_day ; 
    elsif v_day = 'friday' then 
     update football set revised_amount = amount+60 where day_name = v_day ; 
    elsif v_day = 'saturday' then 
     update football set revised_amount = amount+70 where day_name = v_day ; 
    elsif v_day = 'sunday' then 
     update football set revised_amount = amount+80 where day_name = v_day ; 
    else 
     dbms_output.put_line(' output failed'); 
    end if; 
    end loop; 
    close c1; 
End; 
/
+0

歡迎來到Stackoverflow。請花點時間閱讀幫助中心關於在本網站上提問的指南。另外,請點擊問題下方的「編輯」按鈕,並使用工具欄中的「代碼」按鈕將代碼格式化爲代碼塊,然後刪除空行並正確顯示,以便人們可以閱讀它。 –

+0

你還沒有告訴我們你有什麼問題。顯示錶格結構和數據通常也很有用。大概這是一個任務,你故意以一種冗長的方式來做這件事,因爲它可以簡單地沒有PL/SQL? –

回答

0

你不應該需要一個光標:

create or replace procedure team2 
as 
begin 
    UPDATE Football 
    SET revised_amount = amount 
         + DECODE(
          day_name, 
          'Monday', 10, 
          'Tuesday', 20, 
          'Wednesday', 30, 
          'Thursday', 40, 
          'Friday', 50, 
          'Saturday', 60, 
          'Sunday', 70 
         ); 
END; 
/

(和你真的不需要程序)

+0

我可以理解,但任務是使用過程/光標完成它。非常感謝您的回覆。將不勝感激,如果你可以幫助我使用光標的輸出。 – ragatry

+0

感謝MTO的建議 – ragatry

0

試試下面的辦法:

update football 
    set revised_amount = amount + case day_name when 'monday' then 10 when 'tuesday' then 20 ... when 'sunday' then 80 end 
; 

只在週一:

update football 
    set revised_amount = amount + case day_name when 'monday' then 10 end 
where day_name in ('monday') 
; 
+0

嗨馬克西姆,感謝您的答覆。你能否單獨解釋/編寫查詢,因此我會試着去理解它。 – ragatry