database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 9200 게시물 읽기
No. 9200
BEGIN is not allowed in a SQL function....
작성자
sdef
작성일
2012-12-21 15:50
조회수
9,120

 질문있습니다...

 

function 코드를 전부 공개 할 수는 없고...

 

 아래와 같은 function이 있습니다.

 

CREATE OR REPLACE FUNCTION grrr()

  RETURNS character AS

$BODY$

begin work;


 select cast('test' as character(20));

commit work;


select cast('aa' as character(20));


$BODY$

  LANGUAGE sql IMMUTABLE 

  COST 100;

ALTER FUNCTION grrr()

  OWNER TO postgres;

 

함수 생성은시 요류가 없는데..

 

실행 하면..

 

********** Error **********

ERROR: BEGIN is not allowed in a SQL function

SQL state: 0A000

 

이런 에러가 나옵니다...

function에 트랜젝션이 되는걸로 아는데...

뭐가 문젤까요????

 

 

 

 

이 글에 대한 댓글이 총 1건 있습니다.

함수 내에 하위 트랜잭션을 사용하려면, plpgsql 프로시져여야할 것 같네요. 

단순 SQL 프로시져로는 위와 같은 것은 것을 구하기는 힘들 것 같습니다. 

plpgsql 구문으로 변경한 함수는 다음과 같습니다. 

CREATE OR REPLACE FUNCTION grrr()
RETURNS character AS
$BODY$
declare
  v_ret char(20);
begin
  begin
   select cast('test' as character(20)) into v_ret;
  end;
  select cast('aa' as character(20)) into v_ret;
  return v_ret;
end;
$BODY$
  LANGUAGE plpgsql IMMUTABLE
  COST 100;

 

김상기(ioseph)님이 2012-12-24 14:54에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9214postgresql-9.1 master-master 구성 [3]
이성환
2013-01-02
8795
9213로우를 일렬로 나눠담고 싶은데요 -ㅂ- 쿼리 해결방법좀 [3]
김현진
2013-01-02
9273
9201pgsql 의 event Scheduler 가 정상적으로 돌지가 않네요 ㅡㅜ [2]
박명회
2012-12-24
9952
9200BEGIN is not allowed in a SQL function.... [1]
sdef
2012-12-21
9120
9199ORACLE -> Postgre 프로시저 관련 질문 드려봅니다. [2]
강명준
2012-12-17
13336
9119기간 query를 하고 싶은데 도무지 방법이 떠오르지 않습니다.ㅜㅜ [1]
ㅜㅜ
2012-12-03
9124
9065view 테이블 update 가 궁금 합니다. [1]
김수지
2012-11-23
8997
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.046초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다