postgresql loop update 함수 만들기 :: 개발/일상_Mr.lee

postgresql loop update 함수 만들기

Posted by Mr.mandu.
2017. 10. 10. 16:32 개발/DB

안녕하세요 ~!

요즘 postgresql을 빈번하게 사용하고 있습니다.

그런데 프로시저가 필요한 상황이 되었는데 ~!

그동안 함수는 만들어 사용하고 있어서 당연히 프로시저도 있는줄 알았습니다.

그런데 따로 프로시저가 없다는 사실!


즉, create procedure이 아닌 create function 을 이용한다는 뜻 입니다.


먼저 기본 함수 생성 문을 정의해 두었습니다.


함수 선언문

CREATE OR REPLACE FUNCTION 함수이름 (in_data character varying)

  RETURNS void AS

$BODY$

DECLARE

    v_row record;

    v_text TEXT;

    idx integer;

 BEGIN

delete from testDB where v_text = in_data;

    

END; 

$BODY$

  LANGUAGE plpgsql VOLATILE


위의 함수를 간단히 설명드리면 일반 delete 함수 입니다.

DECLARE 부분은 변수 선언하는 모습을 보여드리기위해 선언한 모습입니다.

위의 함수 실행과는 연관이 없습니다.


특이한점은 $BODY$로 묶은 점입니다.

$BODY$ 대신에 '' 혹은 $$로고 붂어도 된다고 합니다.

그리고 create or replace의 의미는 기존에 함수가 없으면 만들고

있다면 대체하라는 뜻 입니다.




앞에 서론이 길었습니다.

이 포스팅에서 하고자 하는 말은

loop를 이용하여 데이터를 update를 하기 위함 입니다.

소스 첨부하겠습니다.


postgresql loop 사용하기

CREATE OR REPLACE FUNCTION 함수명(in_data character varying)

  RETURNS void AS

$BODY$

DECLARE

    v_row record;

v_text TEXT;

    idx integer;

 BEGIN

 idx:=0;

for v_row in (select * from kr.family2 where no=in_data) LOOP

idx:= idx+1;

v_text = v_row.text;

update testDB2 set  no = idx where text = v_text;

END LOOP;

    

END; 

$BODY$

  LANGUAGE plpgsql VOLATILE


select를 이용해 row값을 얻고 

이 숫자마큼 loop 문을 돌리고 있습니다.

그리고 이를 이용해 update 까지 실행하고 있습니다.


여기서 알아두어야 할 점은

v_row에서 가져온 값에 대한 데이터는 

v_row.컬럼명 입니다.


이를 활용하시길 바랍니다. 

감사합니다.