2013-03-28 62 views
0

創建一個PL/SQL塊來檢索和顯示指定月份中所有承諾的數據。應該爲每個祈願顯示一行輸出。在輸出的每行中包含以下內容:使用方法:記錄或光標?

•承諾ID,捐贈者ID和承諾金額
•如果承諾一次性支付,請顯示「整筆彙總」。
•如果以月付方式支付質押,請顯示「每月 - #」(#代表支付的月數)
•列表應該排序,以便首先顯示所有一次性總付質押。

這裏是結構表。

CREATE TABLE DD_Pledge (
        idPledge number(5), 
        idDonor number(4), 
        Pledgedate DATE, 
        Pledgeamt number(8,2), 
        idProj number(5), 
        idStatus number(2), 
        Writeoff number(8,2), 
        paymonths number(3), 
        Campaign number(4), 
        Firstpledge char(1), 
        CONSTRAINT pledge_id_pk PRIMARY KEY(idPledge), 
        CONSTRAINT pledge_idDonor_fk FOREIGN KEY (idDonor) 
          REFERENCES dd_donor (idDonor), 
        CONSTRAINT pledge_idProj_fk FOREIGN KEY (idProj) 
          REFERENCES dd_project (idProj), 
        CONSTRAINT pledge_idStatus_fk FOREIGN KEY (idStatus) 
          REFERENCES dd_status (idStatus)); 

我試圖用記錄,但似乎該記錄是不會工作,因爲它給了我錯誤時,指定的月份有一個以上的承諾。有沒有辦法做到這一點使用記錄(因爲這是我們承擔的記錄後,我們把它分配)

也許光標將是一個不錯的選擇,但由於前面提到的點,我想知道什麼是解決這個問題的方法。

+0

包含一個表定義的副本,即它們包含哪些列,哪些是主鍵,哪些是外鍵/相關鍵,它們是什麼類型等等。簡而言之,聽起來像你正在做的事情不需要一個遊標。沒有什麼,永遠不需要光標。 – Sepster

+0

@Sepster我編輯了這個問題對不起,我不好,我正在做另一個問題 – captinmemo

+0

那麼我在哪裏可以找到它是月付還是一次付清?無論如何,當然,例如我的答案中的'case'聲明爲您提供瞭解決單個表所需的線索? – Sepster

回答

2
SELECT 
    p.idPledge, 
    p.idDonor, 
    p.Pledgeamt as this_payment, 
    case 
    when p.paymonths = 0 then 'Lump Sum' 
    else 'Monthly - ' || p.paymonths 
    end as payment_method 
FROM 
    dd_pledge p 
WHERE 
    TRUNC(p.Pledgedate) >= '01-Mar-2010' AND TRUNC(p.Pledgedate) < '01-Apr-2010' 
order by 
    4 

假設您將根據需要添加月份的開始/結束日期。