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'。如果您使用硬编码日期添加工作解决方案将会很好。 –