postgresql loop update 함수 만들기
안녕하세요 ~!
요즘 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.컬럼명 입니다.
이를 활용하시길 바랍니다.
감사합니다.
'개발 > DB' 카테고리의 다른 글
postgresql select 해서 update 하기 (join 활용) (0) | 2017.12.15 |
---|---|
[oracle] cursor를 이용한 loop 돌리기 (2) | 2017.11.23 |
[posgreSql] pgAdmin을 이용하여 데이터 백업 및 복구하기 (2) | 2017.11.13 |
오라클 ORU-10027: buffer overflow, limit of 20000 (0) | 2017.08.29 |
오라클 외부접속 허용 tnsnames, listener (4) | 2017.08.23 |
[pgAdmin] 컬럼(colum) text size 설정 (0) | 2017.08.19 |
[CUBIRD]큐브리드 접근 port 열기 (0) | 2017.07.03 |