본문 바로가기

PostgreSQL

postgresql procedure에서 table의 여러 row를 return 할 때. CREATE OR REPLACE FUNCTION get_friend(bigint) RETURNS setof user_info AS $BODY$ declare input_no alias for $1; result user_info%ROWTYPE; BEGIN --for result in EXECUTE 'select * from user_info' || $1 loop -- 조건문이다. for result in EXECUTE 'select * from user_info' loop return next result; end loop; return; end; $BODY$ LANGUAGE 'plpgsql' --select get_friend(2) 기본적으로 LANGUAGE 'plpgsql'를 LANGUAGE 'sql.. 더보기
postgresql insert할 때 key값 가져오기. create or replace function test_insert_get_key() returns bigint as $$ declare test_key bigint; begin insert into test_table(col1, col2 ) values( 2, 1 ) RETURNING test_table_no INTO test_key; -- test_table_no 는 자동 생성되는 key 컬럼이다. RAISE NOTICE 'key : % ', test_key; return test_key; end; $$ language plpgsql 실행하기. select test_insert_get_key(); 더보기
postgresql procedure에서 다른 procedure 호출하기. procedure 1. - call_procedure CREATE OR REPLACE FUNCTION call_procedure(bigint, bigint, integer) RETURNS integer AS $$ declare input_1 alias for $1; input_2 alias for $2; result smallint default 0; exeResult integer default 0; BEGIN select called_procedure(compensation_point, input_user_no ) into exeResult; RAISE NOTICE 'result = %',exeResult; return result; end; $$ LANGUAGE plpgsql procedure 2... 더보기
postgresql if then 구문 주의 점.. IF condition THEN express END IF; 아.. 된장. END IF에서 ; 이 필요하다. 이것 때문에 생고생했다. 더보기
postgresql Table의 row를 return하는 procedure create or replace function test() returns user_info as $$ declare result user_info%ROWTYPE; begin select * into strict result from user_info where user_no = 22; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE EXCEPTION 'user info % not found', 22; WHEN TOO_MANY_ROWS THEN RAISE EXCEPTION 'too many % found', 22; return result ; end; $$ language plpgsql strict는 반드시 1행만 return 한다는 조건이다. Data가 없을 경우 No_DATA_.. 더보기
Postgresql 번호 자동 증가. sql server와 다르게 좀 복잡하다. 많이 헤멨다. 구글링 해본 결과 테이블 생성할 때 create table table_name( no serial ) 이렇게 나와있는데 이렇게 하게 되면 no 의 값은 integer가 된다. 편하다. 근데 난 no 가 integer보단 bigint가 되길 원했다. 이 글을 쓰면서 컬럼 값 integer를 bigint로 변경해도 되겠구나.. 라고 생각이 났다. 여하튼 구글링을 더 해 본 결과 다른 방법을 찾았다. Postgres는 sequence라는 일종의 procedure를 이용해서 번호를 자동증가하게 한다. 그래서 sequence를 만들어보자. CREATE SEQUENCE auto_increment_seq 여기서.. 1. Table를 생성할 때. 2. 기존 테이.. 더보기