postgresql
PL / pgSQL 프로그래밍
수색…
비고
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에 대한 몇 가지 무료 안내서 및 책에 대한 링크입니다.
- 공식 문서 : https://www.postgresql.org/docs/current/static/plpgsql.html
- w3resource.com 튜토리얼 : http://www.w3resource.com/PostgreSQL/pl-pgsql-tutorial.php
- postgres.cz 튜토리얼 : http://postgres.cz/wiki/PL/pgSQL_(en)
- PostgreSQL 서버 프로그래밍, 제 2 판 : https://www.packtpub.com/big-data-and-business-intelligence/postgresql-server-programming-secondededition
- PostgreSQL 개발자 가이드 : https://www.packtpub.com/big-data-and-business-intelligence/postgresql-developers-guide
기본 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 함수로 반환하기위한 옵션 :
사용자 정의 예외
사용자 지정 예외 '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