달나라 노트

Redshift : create procedure, call procedure (procedure의 선언과 호출) 본문

SQL/Redshift

Redshift : create procedure, call procedure (procedure의 선언과 호출)

CosmosProject 2025. 3. 15. 13:07
728x90
반응형

 

 

 

Procedure는 query를 포함에 어떠한 일련의 작업들을 명시해둔 하나의 집합입니다.

예를 들면

변수를 선언하고

if, for loop 등을 사용하여 다양한 프로세스를 구성해두고

원하는 query를 적어두고 이를 실행하도록 하는 procedure를 구성해두면

이 procedure를 실행함으로서 위 process를 모두 실행할 수 있는 효과를 누릴 수 있습니다.

 

 

 

create or replace procedure schema.procedure_name(
    f1    in bigint,
    f2    in float,
    f3    in varchar
)
language plpgsql
as $$
    begin
    	~~ procedure conetents ~~
    end;
$$
;

 

procedure는 위처럼 선언합니다.

 

1. table과 비슷하게 procedure 또한 schema.procedure_name의 형태로 선언되어야 합니다.

 

2. procedure는 변수를 받을 수 있기 때문에 f1, f2, f3처럼 변수를 설정할 수 있습니다. 그리고 각 변수의 data type또한 설정해야 합니다. (bigint, float, varchar 등)

 

3. 변수 설정 부분을 보면 in 이라는 키워드가 적혀있는데 이는 입력을 받는 변수라는 의미입니다.

in -> 입력을 받는 변수

out -> 출력용 변수

inout -> 입출력용 변수

 

3. procedure가 실행될 기반 language를 설정할 수 있습니다. 이 내용은 redshift를 기반으로 서술하므로 plpgsql(procedure language postgresql)을 사용합니다.

 

4. as $$ begin ~~ end; $$ 사이에 procedure가 선언됩니다.

 

5. procedure를 호출하면 begin ~~ end; 사이에 명시된 내용이 실행됩니다.

 

 

 

begin;

call schema.procedure_name(10, 5.5, 'test');

end;

 

procedure의 호출은 call을 이용합니다.

procedure는 parameter를 가지고 있기 때문에 procedure 호출 시에 반드시 parameter를 명시해주어야 합니다.

이때 parameter는 procedure 선언 시에 명시된 parameter의 순서에 따라 할당되며

선언된 parameter의 data type과 procedure 선언 시에 전달된 parameter 값의 data type도 일치해야 합니다.

 

 

 

 

procedure는 parameter가 매우 중요합니다.

create or replace procedure schema.procedure_name(
    f1    in bigint,
    f2    in float,
    f3    in varchar
)
language plpgsql
as $$
    begin
    	~~ procedure conetents ~~
    end;
$$
;

 

create or replace procedure schema.procedure_name(
    f1    in bigint,
    f2    in varchar,
    f3    in varchar
)
language plpgsql
as $$
    begin
    	~~ procedure conetents ~~
    end;
$$
;

 

위 2개 procedure는 동일한 schema, 동일한 procedure_name을 가지고 있으나

각 procedure에 선언된 변수의 data type이 다르기 때문에 (f2의 data type이 다름)

서로 다른 procedure로 취급됩니다.

 

 

 

 

다음은 procedure를 선언하고 호출하는 예시입니다.

 

create or replace procedure schema.procedure_name(
    f1    in bigint,
    f2    in float,
    f3    in varchar
)
language plpgsql
as $$
    begin
    	raise notice 'f1 = %, f2 = %, f3 = %', f1, f2, f3;
        raise info 'f1 = %, f2 = %, f3 = %', f1, f2, f3;
    end;
$$
;


begin;
call schema.procedure_name(100, 3.72, 'abcde');
end;


-- Result
f1 = 100, f2 = 3.72, f3 = abcde
f1 = 100, f2 = 3.72, f3 = abcde

 

procedure를 호출할 때 10, 5.5, abcde라는 parameter를 전달하였습니다.

그러면 순서대로

f1 = 10

f2 = 5.5

f3 = abcde

이렇게 할당이 됩니다.

 

raise notice, raise info는 console에 어떠한 message를 출력해주는 기능을 합니다.

 

 

 

출처

https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/stored-procedure-create.html

 

Amazon Redshift의 저장 프로시저 개요 - Amazon Redshift

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/stored-procedure-naming.html

 

저장 프로시저 명명 - Amazon Redshift

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

 

 

 

 

 

 

728x90
반응형
Comments