글
DB 에 들어가서..
#create function plpgsql_call_handler() returns opaque as '/usr/local/pgsql/lib/plpgsql.so' language 'C';
#create trusted procedural language 'plpgsql' handler plpgsql_call_handler lancompiler 'PL/pgSQL';
CREATE FUNCTION pgl_get_rows() RETURNS SETOF RECORD AS
'
DECLARE
row RECORD;
BEGIN
FOR row IN EXECUTE ''select field1,field2 from pkg_test ''
LOOP
RETURN next row;
END LOOP;
RETURN;
END;
' LANGUAGE 'plpgsql' ;
CREATE TABLE FUNCTION_NAME([PARAM1,PARAM2,..]) RETURNS [SETOF] DATA_TYPE
AS '
USER_DEFINITION
' LANGUAGE 'lang';
위의 []는 생략 가능함을 의미한다. lang에는 sql,plpgsql,c 등이 올수 있다.
다음은 앞부분(기초편1)에서 언급된 function 예이다. 실행 결과는 앞부분을 참조하라.
CREATE FUNCTION SQL_FUNC_1(int4) RETURNS text AS '
SELECT
CASE
WHEN NOGADA_TAB.id_ngd = $1
THEN ''있군요..''::text
ELSE ''없군요..''::text
END
' LANGUAGE 'sql';
SELECT SQL_FUNC_1(1) ;
다음은 포스트그레스의 function으로 간단한 예와 그 결과이다.
create function func1() returns text
as ' select \'nogadax\'::text \; '
language 'sql';
select func1() as name;
name
-------
nogadax
(1 row)
returns 에 예약어 setof 를 사용하면 한번에 여러 데이타를 받을 수 있다. 리턴형에는 일반 자료형뿐만아니라 테이블이나 뷰도 포함된다.
create table tablex (id_t int4, name text);
insert into tablex values ( 1, 'abc');
insert into tablex values ( 2, 'bcd');
insert into tablex values ( 3, 'cde');
insert into tablex values ( 4, 'def');
create function func2(int4) returns setof tablex
as ' select * from tablex where id_t > $1 '
language 'sql';
select id_t(func2(1)) as id ;
id
---
2
3
4
(3 rows)
select id_t(func2(2)) as id , name(func2(2)) as name;
id | name
-----+--------
3 | cde
4 | def
(2 rows)
Create Function fnBoardMaxNum(text) returns Integer As '
Declare
cQuery text;
cTable ALIAS FOR $1;
nMaxNum Integer;
pResult record;
Begin
cQuery := ''Select max(nBoardNum) as nMaxNum From '' || cTable;
For pResult In Execute cQuery
LOOP
nMaxNum := pResult.nMaxNum;
End Loop;
return nMaxNum;
end;
' Language 'plpgsql';
[출처] PostgreSQL 의 PL/pgSQL Function 예제.|작성자 가우나라
'PostgreSQL' 카테고리의 다른 글
PL/pgSQL 는 Postgres 데이터베이스를 위한 적재가능한 절차형 언어. (0) | 2009.12.24 |
---|---|
PostgreSQL 8.3의 내장 자료형들 (0) | 2009.08.13 |
PostgreSQL 백업/복구(pg_dump/pg_restore)| (0) | 2009.06.30 |
시스템 카탈로그와 SQL서버 벤치마크 이야기 (0) | 2009.06.30 |
SPI 와 트리거의 밀월여행 (0) | 2009.06.30 |
RECENT COMMENT