그러니까... 넘겨주는 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에 해당하는 모든 자료가 나왔던거 같습니다.
:
: 그런데 파이어버드에서는 위와같이 해서는 안되더군요...
: 제가 지금 여러 방법을 찾아가며 공부하고는 있습니다만,
: 인터베이스 계열이 처음이다 보니 어려움이 많습니다.
:
: 관심에 다시한번 감사 드립니다.
:
|