2013-07-02 3 views
0

MySQL에서 PosgreSql로 마이그레이션하는 중이며 일괄 업데이트를 호출하려는 proc/function에 약간의 문제가 있습니다.Spring을 이용한 PostgreSQL 배치 업데이트. 반환 값이없는 함수를 작성하는 방법

값을 void로 선언하더라도 항상 값을 반환하는 것처럼 보이면 Postgresql 함수에서 업데이트를 수행하려면 어떻게해야합니까?

이 내용은 문제를 설명하기위한 간단한 예입니다.

CREATE OR REPLACE FUNCTION update_function(
    IN i_id bigint) 
    RETURNS void AS $$ 
    DECLARE 
    d_id bigint; 
    BEGIN 
    UPDATE test_table set id = '' where id = i_id; 
    RETURN; 
END; 
$$ LANGUAGE plpgsql; 

나는 이것이이 오류가있는 SpringTemplate.update() 메소드를 사용하여 호출하는 경우 "org.postgresql.util.PSQLException :. 아무 것도 예상되지 않을 때 결과가 반환을" 업데이트를 호출하고 값을 반환하면 오류가 발생합니다. 그렇게 이해합니다.

제 질문은 값을 반환하지 않는 postgresql 함수를위한 방법이 있습니까, 아니면 배치 업데이트를 수행 할 다른 방법을 찾아야합니까? 내가 함수를 사용하여 업데이트를 수행하려는 이유는 proc/함수에서 업데이트되는 많은 테이블이 있다는 것입니다. 위 함수는 간단한 설명입니다.

다른 대안은 입력 값의 배열을 구문 분석하고 반복 할 수 있습니다.

+0

이 함수를 호출하는 데 사용하는 포스트그레스 버전과 정확한 쿼리는 무엇입니까? –

+0

psql (PostgreSQL) 9.1.5와 "select save_class_function (?,?,?,?,?)"을 호출합니다. –

+0

'execute()'메소드는 어떻게됩니까? –

답변

1

필자의 문제는 함수가 결과를 반환하지 않더라도 PostgreSQL이 결과 집합에 행을 추가한다는 것입니다. 빠른 테스트는 실제로 PostgreSQL에서 null을 반환한다는 것을 보여줍니다.

내가 무엇을하는지 (그리고 이것이 스프링 방식이 아닐 수도 있다는 것을 깨닫는다.) 내가해야 할 일을하고 유용한 값을 반환하는 함수를 갖는 것이다. 그런 다음 그 가치를 지니고 그것을 온전한 검사 목적으로 사용합니다. 예를 들어 업데이트 된 총 행 수 (또는 상위 행의 가장 최신 버전)를 반환하고이를 사용하려는 응용 프로그램에 다시 넘겨 줄 수 있습니다.

그러나 예,이 작업을 수행하는 다른 방법을 찾아야합니다.

관련 문제