postgreSQL plpg/SQL 0 2 870

by 아뵹 [PL/SQL] postgreSQL plpg/SQL insert table [2020.06.18 13:23:19]


안녕하세요 오래만에 다시 질문 드립니다.

postgreSQL function 작성을 하고 있는데요. 

타 테이블의 데이터를 한개의 row씩 가져와서 online_users_f 테이블의 기존 내용이랑 비교한 후에

바뀐 행만 insert하는 간단한 코드입니다 ㅠㅠ 간단한 게 분명한데 저는 안되네요...후후

-- f_bbgs_onusers_upsert3()

CREATE OR REPLACE FUNCTION a.f_onusers_upsert6(arg_pk1 integer,arg_online_content_pk1 integer,arg_user_id character varying(50),
													  arg_cumulative_time double precision,arg_last_seen_time double precision,
													  arg_page integer,arg_percentage double precision,arg_last_updated timestamp without time zone)

RETURNS void AS $$		
DECLARE
	d_cnt integer := 0;
BEGIN
  LOOP
    BEGIN
		
	select count(*) into d_cnt from a.online_users_f where online_content_pk1 = arg_online_content_pk1 
		and user_id = arg_user_id and last_updated = arg_last_updated;
		
	IF d_cnt != 0 THEN
		RAISE NOTICE 'This is existed row';	
	ELSE
		insert into a.online_users_f values (arg_pk1, arg_online_content_pk1, arg_user_id, arg_cumulative_time, arg_last_seen_time, arg_page, arg_percentage, arg_last_updated);
		  RETURN;
	 END IF;
    END;
  END LOOP;
END; $$
LANGUAGE plpgsql;

여기서 a는 스키마명입니다.

어느 부분이 틀린걸까요...?

by 아뵹 [2020.06.18 13:26:56]

참고로 해당 테이블의 online_content_pk1, user_id이 기본키? 느낌으로 볼 수 있고, last_updated컬럼은 주기적으로 업데이트가 되는 테이블입니다.
저는 last_updated 내용이 바뀐 부분이 있으면 update가 아닌 insert를 하고자 하구요! 바뀐 내용 포함해서 쭉 쌓아야하거등요


by JYK94 [2020.06.18 15:04:23]

어떤 부분이 어떻게 안되는거죠? insert부분이 안되는건가요?

추가로

기존테이블과 타테이블이 일치하지 않는 data들을 조회하는 SELECT 질의를 만드셔서

FOR-LOOP문을 사용하시는게 좋을 것 같습니다.

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입