수색…


비고

PL / pgSQL은 PostgreSQL의 내장 프로그래밍 언어로서, 다른 데이터베이스의 저장 프로 시저로 알려진 데이터베이스 내에서 실행되는 함수를 작성하는 데 사용됩니다. 루프, 조건문 및 반환 형식을 사용하여 SQL을 확장합니다. 많은 개발자들에게는 구문이 이상 할 수 있지만 데이터베이스에 연결하는 오버 헤드가 제거되므로 응용 프로그램 서버에서 실행되는 것보다 훨씬 빠릅니다. 그렇지 않으면 쿼리를 실행하고 결과를 기다릴 필요가있을 때 특히 유용합니다. 다른 쿼리를 제출하십시오.

PL / Python, PL / Perl 및 PLV8과 같이 PostgreSQL을위한 많은 다른 절차 언어가 존재하지만 PL / pgSQL은 구문이 SQL을 기반으로하므로 첫 번째 PostgreSQL 함수를 작성하려는 개발자에게 공통된 출발점입니다. 또한 Oracle의 원시 절차 언어 인 PL / SQL과 유사하므로 PL / SQL에 익숙한 개발자라면 누구나 익숙한 언어를 찾을 수 있으며 향후 Oracle 응용 프로그램을 개발하려고하지만 무료 데이터베이스로 시작하려는 개발자는 전환 할 수 있습니다 상대적으로 쉽게 PL / pgSQL에서 PL / SQL로.

다른 절차 언어가 존재하고 PL / pgSQL이 속도를 포함하여 어떠한면에서도 반드시 우수한 것은 아니지만 PL / pgSQL의 예제는 PostgreSQL 함수를 작성하는 데 사용되는 다른 언어의 공통 참조 점 역할을 할 수 있음을 강조해야합니다. PL / pgSQL은 모든 PL에 대한 가장 많은 튜토리얼과 책을 가지고 있으며, 적은 수의 문서로 언어를 학습 할 수있는 발판이 될 수 있습니다.

다음은 PL / pgSQL에 대한 몇 가지 무료 안내서 및 책에 대한 링크입니다.

기본 PL / pgSQL 함수

간단한 PL / pgSQL 함수 :

CREATE FUNCTION active_subscribers() RETURNS bigint AS $$
DECLARE
    -- variable for the following BEGIN ... END block
    subscribers integer;
BEGIN
    -- SELECT must always be used with INTO
    SELECT COUNT(user_id) INTO subscribers FROM users WHERE subscribed;
    -- function result
    RETURN subscribers;
EXCEPTION
    -- return NULL if table "users" does not exist
    WHEN undefined_table
    THEN RETURN NULL;
END;
$$ LANGUAGE plpgsql;

이것은 SQL 문으로 만 구현되었지만 기능의 기본 구조를 보여줍니다.

함수를 실행하려면 다음을 수행하십시오.

select active_subscribers();

PL / pgSQL 구문

CREATE [OR REPLACE] FUNCTION functionName (someParameter 'parameterType') 
RETURNS 'DATATYPE'
AS $_block_name_$
DECLARE
    --declare something
BEGIN
    --do something
    --return something
END;
$_block_name_$
LANGUAGE plpgsql;

블록 반환

PL / pgSQL 함수로 반환하기위한 옵션 :

  • Datatype 모든 데이터 Datatype 목록
  • Table(column_name column_type, ...)
  • Setof 'Datatype' or 'table_column'

사용자 정의 예외

사용자 지정 예외 'P2222'만들기 :

create or replace function s164() returns void as
$$
begin
raise exception using message = 'S 164', detail = 'D 164', hint = 'H 164', errcode = 'P2222';
end;
$$ language plpgsql
;

errm을 지정하지 않는 사용자 정의 예외 작성 :

create or replace function s165() returns void as
$$
begin
raise exception '%','nothing specified';
end;
$$ language plpgsql
;

부름:

t=# do
$$
declare
 _t text;
begin
  perform s165();
  exception when SQLSTATE 'P0001' then raise info '%','state P0001 caught: '||SQLERRM;
  perform s164();

end;
$$
;
INFO:  state P0001 caught: nothing specified
ERROR:  S 164
DETAIL:  D 164
HINT:  H 164
CONTEXT:  SQL statement "SELECT s164()"
PL/pgSQL function inline_code_block line 7 at PERFORM

여기서 커스텀 P0001은 처리되고, P2222는 실행을 중단하지 않습니다.

또한 여기서는 예외 테이블을 유지하는 것이 매우 중요합니다. http://stackoverflow.com/a/2700312/5315974



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow