FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[790] Re:Re:Re:Re:Re:[질문] 파이어버드의 스토어드 프로시져에 관하여
박지훈.임프 [cbuilder] 2622 읽음    2003-08-30 07:30
그러니까... 넘겨주는 GONO에 해당하는 하나의 레코드를 리턴하면 되겠군요.
프라이머리키이거나 유니크 인덱스이겠구요.

MS SQL에서 스토어드 프로시저를 써보지 않았지만.. 좀 이상하네요. ^^;;
리턴하는 변수가 하나도 없이 자동으로 셀렉트한 결과가 리턴된다니...

어쨌든, 파이어버드에서는 리턴될 변수 리스트가 있어야 하고, 이 변수들에 셀렉트 결과를 넣어줘야 합니다.
이 리턴 변수들이 스토어드 프로시저의 결과 레코드셋으로 돌려지지요. 따라서 레코드의 필드 전체를 돌려
받고 싶다면 레코드 전체의 필드들의 리스트가 리턴 변수들로 되어있어야 합니다.

예를 들어, gomaster 테이블에 uname, umail 두개의 필드가 있다면, 이 두개의 필드가 리턴될
변수 리스트에 선언되어 있어야 하구요. select의 결과를 into로 이들 변수들에 담아야 합니다.
그리고 into로 받지 않는 필드는 select해서는 안됩니다. (select한 필드는 어떤 변수에든 받아야 합니다)
그러니까, 다음과 같이 하시면 됩니다.

alter PROCEDURE ST_GOMASTER_SELECT
(
    GONO VARCHAR(10)
)
returns
(
    uname VARCHAR(20),
    umail VARCHAR(50)
)
AS
begin
  /* Procedure Text */
  select uname, uemail from tb_user where GONO=:GONO into :uname, :umail;
end

만약 리턴될 레코드가 여러개라면 이 방식으로는 안되고, 위의 select문 대신에 다음과 같이 for select
do 문을 써야 합니다.

  for select uname, uemail from gomaster where GONO=:GONO into :uname, :umail
  do
    suspend;

물론 이렇게 하면 해당 레코드가 하나뿐일 때도 잘 동작하니까, 레코드가 하나이든 여러개든 이렇게 하는
것이 좋을 수도 있습니다.

만약 하나하나의 레코드들이 셀렉트되는 순간에 뭔가 작업을 하고 싶다면..
예를 들어 계산된 필드를 집어넣고 싶다면, 그 필드도 리턴 변수 리스트에 추가하고 for select 다음의
do 문에서 begin, end 블럭을 만들고 그 사이에 계산식을 넣으면 됩니다.
이렇게 말이죠.

  for select uname, uemail from gomaster where GONO=:GONO into :uname, :umail
  do
  begin
    (계산식...)
    suspend;
  end

그럼...


고인섭 님이 쓰신 글 :
: 먼저 이렇게 관심과 답변을 주셔서 감사합니다.
: 제가 질문하는 법이 서툴러서 죄송 합니다.
: 이제 처음 파이어 버드를 쓰다보니, 어디부터 배워야 하는지도 감을 못잡고 있습니다.
:
: 먼저 GOMASTER는 고객이 들어있는 테이블 입니다.
: 프로시져에 특정 고객번호를 넣어서 해당하는 번호의 고객을 돌려 받고 싶습니다.
: MS SQL Server에서는
:
: CREATE PROCEDURE ST_GOMASTER_SELECT (
:     GONO VARCHAR(10))
: AS
: begin
:   /* Procedure Text */
:   select * from gomaster where gono = :gono;
: end
:
: 와 같이 사용하면 gono에 해당하는 모든 자료가 나왔던거 같습니다.
:
: 그런데 파이어버드에서는 위와같이 해서는 안되더군요...
: 제가 지금 여러 방법을 찾아가며 공부하고는 있습니다만,
: 인터베이스 계열이 처음이다 보니 어려움이 많습니다.
:
: 관심에 다시한번 감사 드립니다.
:

+ -

관련 글 리스트
784 [질문] 파이어버드의 스토어드 프로시져에 관하여 고인섭 2186 2003/08/29
785     Re:[질문] 파이어버드의 스토어드 프로시져에 관하여 박지훈.임프 1989 2003/08/29
787         Re:Re:[질문] 파이어버드의 스토어드 프로시져에 관하여 고인섭 2028 2003/08/29
788             Re:Re:Re:[질문] 파이어버드의 스토어드 프로시져에 관하여 박지훈.임프 2525 2003/08/29
789                 Re:Re:Re:Re:[질문] 파이어버드의 스토어드 프로시져에 관하여 고인섭 2809 2003/08/30
790                     Re:Re:Re:Re:Re:[질문] 파이어버드의 스토어드 프로시져에 관하여 박지훈.임프 2622 2003/08/30
791                         Re:Re:Re:Re:Re:Re:[감사] 감사 합니다!!!! 고인섭 1985 2003/08/30
994                             Re:Re:Re:Re:Re:Re:Re:[감사] 감사 합니다!!!! 박지훈.임프 1720 2003/08/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.