필자는 항상 다음 주일의 날짜를 알려주는 함수를 정의했습니다. 그것은 여기에, 잘 작동 코드입니다 : 내가 파일에 데이터를 덤프하는 또 다른 기능을 가지고 있고 내부 nextSunday()
기능을 사용할 필요가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
:
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)입니다. '(select nextsunday()) 대신'(date_trunc ('week, current_date) + interval'1 week '- interval'1 day ') :: date'을 시도하면 어떻게됩니까? Btw. 나는 select에서'nextSunday()'를 감쌀 필요가 없다고 생각한다 -'ba.data = nextsunday()'또한 작동해야한다. 예를 들어'select 1 where nextsunday()> current_date'를 시도해 보라. 하드 코딩 된 날짜가있는 작업 솔루션을 추가하면 좋을 것입니다. –