0
我寫PostgreSQL中的功能,並想知道如果我能做到以下幾點:如果循環PostgreSQL的問題
我有一個INSERT語句中的每一個。我可以爲formatdate1和formatdate2傳遞這樣的值嗎?
我也在更新一個表。它是如何做到這一點的PostgreSQL?
CREATE OR REPLACE FUNCTION Check returns void AS $$ DECLARE startDate=date; formateDate1=date; formatdate2=date;newDate=date; BEGIN startDate:= SELECT to_date(lastdate::date, 'MM-DD-YYYY') FROM setup; for i in 1..3 LOOP IF i = 1 THEN formateDate1 := select (startDate - INTERVAL '11 months'); formatdate2:= to_date(formatdate2::date,'YYYYMM'); insert into warehouse.memcnts1 (select distinct source, formatdate2 as yearmo, to_date(formateDate1, 'MM-DD-YYYY') where effdt <= formateDate1 and enddt >= formateDate1); ELSIF i = 2 THEN -- this is todays date --insert query here insert into warehouse.memcnts1 (select distinct source,formatdate2 as yearmo, to_date(formateDate1, 'MM-DD-YYYY') where effdt <= formateDate1 and enddt >= formateDate1); ELSIF i = 3 THEN formateDate1 := select (startDate + INTERVAL '1 months'); newDate=formateDate1; update dwset SET lastdate := newDate; -- wonder if this is right? formatdate2:=startDate; END IF; END LOOP; END $$ language 'plpgsql';
當你嘗試它時會發生什麼? – SingleNegationElimination
我不明白你在問什麼問題1. 對於問題2,你的更新語句應該是這樣的: UPDATE dwset SET lastdate = newDate WHERE foo = bar; - 除非你想更新dwset中的所有行 其他一些意見: - 循環的重點是什麼?它在我看來像循環代碼,循環只是複雜尋找沒有明顯的原因。 - lastdate來自哪裏?是應該是一個參數的功能? – Andrew
@Andrew對於Q2,是的,它正在更新所有行(它只有一個記錄,表示記錄上的最後更新)。循環的要點是(實際上有13個案例(日期))插入最近13個日期的13條記錄。 lastdate是一個db列。對於Q1,我對Postgresql相當陌生,所以我不熟悉它的語法。按照上面的方法獲取它們之後,我可以傳遞formatdate1和formatdate2的值嗎? – arm