3
我定義了一個函數,總是給我下個星期日的日期。它工作正常,這裏是代碼:在PL/PGSQL的另一個函數中調用一個函數
CREATE FUNCTION nextSunday() RETURNS date AS $$
DECLARE
dia_semana INT := CAST(EXTRACT(DOW FROM CURRENT_DATE)as INT);
dia INT := 7 - dia_semana;
BEGIN
RETURN current_date + dia;
END;
$$ LANGUAGE plpgsql
我還有另外一個功能,數據轉儲到一個文件,我需要使用nextSunday()
函數內部:
CREATE OR REPLACE FUNCTION popularTabelaPessoa() RETURNS VOID AS $$
BEGIN
COPY(SELECT pe.id, pe.fk_naturalidade, pe.fk_documentacao_pessoal, pe.nome,
pe.cpf, pe.data_nascimento, pe.sexo, pe.estado_civil, pe.nome_mae,
pe.data_alteracao, pe.usuario_banco_alteracao,
pe.usuario_aplicacao_alteracao
FROM fluxo_lt.banca ba
INNER JOIN corporativo.localidade lo
ON ba.fk_municipio = lo.id
INNER JOIN fluxo_lt.agendamento_candidato ac
ON ac.fk_banca = ba.id
INNER JOIN info_detran.processo as pr
ON ac.fk_processo = pr.id
INNER JOIN info_detran.candidato as ca
ON pr.fk_candidato = ca.id
INNER JOIN corporativo.pessoa as pe
ON ca.fk_pessoa = pe.id
WHERE ba.data = (SELECT nextSunday())
ORDER BY lo.nome, pe.nome)
TO '/tmp/dump.sql';
END;
$$ LANGUAGE plpgsql
但它無法正常工作。字段ba.data
是date
,與返回值爲nextSunday()
函數的類型相同。代碼執行時沒有任何錯誤,但該文件是空白的。如果我硬編碼一個日期,它工作得很好。已經嘗試過所有東西(投射,將其放入一個變量,作爲參數傳遞給函數),但迄今爲止沒有任何工作。
我使用的是Postgres 9.3。
您確定從函數返回的日期與您硬編碼的日期相同嗎?另外,我在第二段代碼中看不到'nextsunday'函數,它應該在哪裏使用? –
@TomasGreif是的,函數返回一個日期類型。你可以測試一下,看看你自己。我編輯了這個問題,現在顯示nextSunday()函數,對此抱歉。 – XVirtusX
我不是指類型,而是值(2014-02-16)。當你嘗試'(date_trunc('week',current_date)+ interval'1 week' - interval'1 day'):: date'而不是'(select nextsunday())'時會發生什麼?順便說一句。我認爲你不需要在select中使用'nextSunday()' - 'ba.data = nextsunday()'也可以工作 - 例如嘗試'select 1 where nextsunday()> current_date'。如果您使用硬編碼日期添加工作解決方案將會很好。 –