본문 바로가기

SQL/모두를 위한 postgreSQL

[PostgreSQL] 8. 함수와 뷰 활용하기_(1)

728x90

1. 함수
    1) 함수
        -원하는 목적의 달성을 위해 일련의 SQL문 작업들을 하나의 단위로 묶는 것을 의미한다
        -여러 작업들을 묶어 하나의 함수 이름으로 부를 수 있다
        -다른 DBMS에서는 저장프로시저 라고도 한다

    2) 함수를 사용하는 이유
        -복잡하고 시간이 많이 걸리는 작업들을 일일이 수행하지 않고 하나의 단위로 묶어서 작을 쉽게 하기 위해서이다
        -함수 사용 여부에 따라 서버와 클라이언트 간의 통신 횟수가 현저히 차이가 난다
        -함수를 사용하지 많으면 각각의 쿼리응 일일이 서버와 통신해야 하는 반면
          함수를 사용하면 한번의 통신만 하면 작업이 가능하다\
        -함수를 사용하면 여러번의 통신횟수가 줄어들어 DBMS의 작업 처리가 더 빨라진다

    3) postgreSQL 프로시저 언어란
        -SQL, C언어 등 다양한 재료로 함수를 만들 수 있다
        -프로시저 언어는 함수와 트리거를 만드는데 사용할 수 있다
        -프로시저 언어로는 PL/pgSQL , PL/TCL, PL/Perl, PL/Python 등이 있다
        -프로시저 언어를 추가로 쓰는 이유는 복잡한 연산처리가 용이하기 때문이다
        -프로시저 언어를 사용하려면 명령어를 언어를 추가할 데이터베이스에 접속한 다음 입력하여 원하는 언어를 데이터베이스에 설치하면 된다

              CREATE LANGUAGE 언어이름
        EX) CREATE LANGUAGE plperl

    4) postgreSQL에서 함수 사용하기
        -함수를 만드는 코드
         
            CREATE FUNCTION function_name(parameter_1 type, parameter_2 type)

            -CREATE FUNCTION으로 함수를 만든다는 선언을 한다
            -function_name 자리에 만들고자 하는 함수의 이름을 입력한다
            -CREATE 대신에 REPLACE를 쓴다면 기존의 함수를 수정하겠다는 의미이다
            -괄호안에는 해당 함수의 두 인자 parameter_1, parameter_2를 선언하고 각각 인자의 형(TYPE)을 입력한다

            RETURNS return_type AS
                'BEGIN
                ...
                END'

            -함수의 반환값 return_type의 형(type)을 입력한다
            -AS 뒤의 BEGIN과 END 사이에 함수의 목적, 즉 함수가 실행할 SQL코드를 입력한다
            -BEGIN과 END는 ''로 감쌀 수 있고, $$...$$로도 감쌀 수 있다

            LANGUAGE language_name;
            
            -마지막으로 함수를 어떤 프로그래밍 언어로 작성할지 결정한다
            -language_name자리에 해당 프로그래밍 언어의 이름을 입력한다
            -위의 코드들을 완성하면 다음과 같은 형태로 postgreSQL 프로시저 언어 함수를 생성할 수 있다

            CREATE FUNCTION function_name(parameter_1 type, parameter_2 type)
                RETURNS return_type AS
                $$ BEGIN
                ...
                END; $$
            LANGUAGE language_name;
            ---------------------------------------------------------------------------
        EX) 정수a와b를 인자로 하고 두 정수의 곱을 리턴하는 mul 함수 생성
            CREATE FUNCTION mul (a INTEGER, b INTEGER)
            RETURNS INTEGER AS
            $$ BEGIN
                RETURN a * b;
            END; $$
            LANGUAGE PLpgSQL;

728x90