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 6685 게시물 읽기
No. 6685
저장 프로시저가 안됩니다.
작성자
안중열(sakura)
작성일
2006-05-16 23:57ⓒ
2006-05-17 00:02ⓜ
조회수
3,366

 

postgresql 8.1.3을 깔아서 저장 프로시저 연습 중입니다.

그런데 아래 스크립트가 에러가 납니다.

아예 reorders 테이블이랑 reorders 함수가 생성이 안됩니다.

아래의 스크립트는 postgresql 7.1버젼 때를 기준으로 작성 된 책의 내용 입니다.

저장프로시저와 트리거를 사용 해 보고 싶은데 잘 안되네요.

현재 나온 postgresql의 저장프로시저와 트리거의 예제들이 잘 설명 되어 있는 싸이트를 알고 계시면 알려 주시면 정말 고맙겠습니다.

친절한 답변에 미리 감사 드립니다. ^^

 

------------------------------------------------------------------------

create table reorders
{
item_id integer,
message text
};


create function reorders(int4) returns integer as '
declare
min_stock alias for $1;
reorder_count integer;
stock_row stock%rowtype;
msg text;
begin
select count(*) into reorder_count from stock where quantity <= min_stock;

for stock_row in select * from stock where quantity <= min_stock;
loop
declare
item_row item%rowtype;
begin
select * into item_row from item where item_id = stock_row.item_id;
msg := ''order more'' || item_row.description || ''s at'' || to_char(item_row.cost_price,''99.99'');
insert into reorders values (stock_row.item_id, msg);
end;
end loop;
return reorder_count;
end;
' language 'plpgsql';
------------------------------------------------------------------------

 

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

reorders 테이블은 { } 대신 ( ) 를 넣어보시면 만들어 집니다.

create table reorders
(
item_id integer,
message text
);

이렇게요

 

reorders 함수가 만들어지지 않는 이유는 여러가지가 있을 수 있습니다.

plpgsql 이라는 언어가 해당 DB에서 사용할 수 없는 상태라면 쉘(psql 이나 pgsql클라이언트 말고 명령창)에서 "createlang plpgsql DB이름" 하시면 plpgsql 언어를 쓰실 수 있습니다.

제가 테스트를 해보려 했으나 stock, item 이라는 테이블이 없어서 정확하지는 않습니다만 -.- 함수를 보고 유추하여 아래와 같이 해봤더니 함수는 잘 만들어집니다.

직접 함수를 돌려봤을 때 어떤 문제가 생길지는 모르겠습니다.

 

create table reorders
(
item_id integer,
message text
); create table stock (item_id int, quantity int);
create table item (item_id int, description text, cost_price int); create function reorders(int4) returns integer as '
declare
 min_stock alias for $1;
 reorder_count integer;
 stock_row stock%rowtype;
 item_row item%rowtype;
 msg text; begin
 select count(*) into reorder_count from stock where quantity <= min_stock;  for stock_row in select * from stock where quantity <= min_stock loop
  select * into item_row from item where item_id = stock_row.item_id;
  msg := ''order more'' || item_row.description || ''s at'' || to_char(item_row.cost_price,''99.99'');
  insert into reorders values (stock_row.item_id, msg);
 end loop; return reorder_count;
end;
' language 'plpgsql';
신기배(소타)님이 2006-05-17 00:12에 작성한 댓글입니다.
이 댓글은 2006-05-17 00:13에 마지막으로 수정되었습니다.

아 잘 되네요.  ^^

 

감사합니다.

 

postgresql 정말 매력이 촬촬 넘쳐 흐르는 녀석 이네요.  ^^

 

 

안중열(sakura)님이 2006-05-17 08:47에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6688insert 가 안됩니다... [2]
김상택
2006-05-17
2905
6687다국어 홈페이지 제작때문에 질문드립니다. [1]
남성식
2006-05-17
3160
6686pgpool 에 대하여. [3]
안중열
2006-05-17
3919
6685저장 프로시저가 안됩니다. [2]
안중열
2006-05-16
3366
6683postgreSQL7.2.4인스톨시 make에러
김정윤
2006-05-15
2622
6681xlog flush request 3/EC2186D8 is not satisfied 오류
이지석
2006-05-15
2635
6680Postgre 튜닝에 관한 질문 입니다. [2]
JC
2006-05-14
3202
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다