david's daily developer note

PostgreSQL PL/SQL CREATE FUNCTION 본문

Develop (kids)

PostgreSQL PL/SQL CREATE FUNCTION

mouse-david 2010. 7. 1. 17:11
728x90
PostgreSQL은 CREATE PROCEDURE 로 저장 프로시저를 만들지 않는다.  
PL/pgSQL 같은 procedural language(절차지향식 언어)를 사용 한다.

\timing

PostgreSQL Function의 예제 이다. 함수 호출시에 시간을 파라메타로 받고, 특정 루프의 수행이 끝난 후에 측정한 시간과의 차이를 계산하여, 전체 질의 시간을 반환한다.

drop FUNCTION  IF EXISTS clean_emp_test1( l_start timestamp with time zone )

CREATE OR REPLACE FUNCTION clean_emp_test1( l_start timestamp with time zone ) RETURNS interval  AS $$
DECLARE 
l_end timestamp; 
BEGIN
FOR i IN 1.. 10000000 LOOP
insert into "test"(id) values( 'hi' ); 
END LOOP;
l_end  := clock_timestamp();
return l_end - l_start;
END;
$$ LANGUAGE plpgsql;

다음은 함수 실행문이다. psql shell이나, pqAdmin에서 다음과 같이 실행한다.
SELECT clean_emp_test1(  clock_timestamp()  );


Select 의 경우에는 반환 되는 결과를 받아야, function을 구성하는데 문제가 없다. 아래는 Boolean값을 받는 자료형의 선언과, 
Select SQL을 수정하여 , Select  문에 대한 Function의 필수 처리를 간단히 작성하였다.
.....
DECLARE 
users_rec RECORD;
BEGIN
SELECT INTO users_rec * FROM "test";
......
PostgreSQL 의 time/ date 관련한 자료형과 함수는 아래에서 참고할 수 있다.
728x90