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

FireBird Q&A
[1567] Re:Re: 저는 지금 절실한데요... 한번 더 살펴 주시겠습니까?
박지훈.임프 [cbuilder] 1903 읽음    2005-09-26 19:48
1. 에러가 난 if 앞의 select 문에서 ;(세미콜론)으로 마무리를 안했네요.

2. 인터베이스/파이어버드에서 select... into 다음이나 update, insert 문에서 파라미터로 쓰는 경우 외에는 변수 이름에는 :(콜론)을 붙이지 않아도 됩니다.
if (:selt = '1') then
대신,
if (selt = '1') then 이렇게 쓰면 된다는 얘기지요.

그럼...

p.s.
길이가 1인 문자열을 varchar로 선언한 것은 그다지 보기가 좋지는 않네요.



아폴론 님이 쓰신 글 :
: 답변해 주셔서 감사합니다.
: if 문을 어찌 해볼라고 오늘 3일째 헤매고 있습니다.
: 아,  FireBird 2.0 을 지금 사용 할 수 있나요?
: 그리고 거기서는 아래 프로시져를 일반쿼리로 할 수 있을 까요?
:
: 다음이 제가 처리 하고자 하는 프로시져 입니다.
: 각 거래처별 건건의 Data를 보여주고  거래처별 소계를 내고
: 마지막에 합계를 내기 위한 프로시져 입니다.
:
: /* 유저가 콤보박스나 Edit박스를 통해 조건을 주고  버튼을 누르면
:    IBQuery를 통해 아래 프로시져를 호출해서 그리드에 보여준다
:    이때 각 조건별로 값을 가져오기 위해 if문을 사용해야 한다.
: */
: CREATE PROCEDURE SEL_TR140T_210
:  (
:     SELT VARCHAR(1), -- 청구월(1)인지 정산월(2)인지의 값
:     TPCD VARCHAR(1), -- 체구분(T), 특정구분(G,C,H,S,D,O..)
:     WJCD VARCHAR(5), -- NULL이면 전체 거래처, 값이 있으면(A0001) 해당거래처만
:     STDT VARCHAR(10),-- 시작월값
:     ENDT VARCHAR(10) -- 종료월값
:  )
: RETURNS
:  (  CODE VARCHAR(5),
:     KUBN VARCHAR(1),
:     "외주처명" VARCHAR(40),
:     "JOB NO" VARCHAR(15),
:     "건   명" VARCHAR(50),
:     "구   분" VARCHAR(20),
:     "외주금액" NUMERIC(9,0),
:     "선지급액" NUMERIC(9,0),
:     "광고주명" VARCHAR(40),
:     JBCD VARCHAR(3)
:  )
: AS
: begin
:   /* Procedure Text */
:   for
:     select   --거래처별 현황
:       cast(a.gc_clcd as varchar(5)) CODE,
:       cast('1' as varchar(1)) KUBN,
:       cast(c.ad_clnm as varchar(40)) "외주처명",
:       cast(
:       substring(b.ga_krno from 1 for 1)||'-'||substring(b.ga_krno from 2 for 4)||'-'||
:       substring(b.ga_krno from 6 for 2)||'-'||substring(b.ga_krno from 8 for 3)
:       as varchar(15)) "JOB NO",
:       cast(b.ga_desc as varchar(50)) "건   명",
:       cast(d.cd_des1 as varchar(20)) "구   분",
:       cast(a.gc_amnt as numeric) "외주금액",
:       case when a.gc_sngb = '1' then cast(a.gc_amnt as numeric) end "선지급액",
:       cast(e.ad_clnm as varchar(40)) "광고주명",
:       cast(b.ga_jbcd as varchar(3)) JBCD
:     from tr140t a
:           left outer join tr110t  b on a.gc_krno = b.ga_krno
:           left outer join client  c on a.gc_clcd = c.ad_clcd
:           left outer join tr010t  d on d.cd_iden = '1' and b.ga_jbcd = d.cd_code
:           left outer join client  e on b.ga_clcd = e.ad_clcd
:     --================여기의 if문 이 꼭 필요한데요 에러나네요==============
:      if (:selt = '1') then   --청구월기준이면 청구기간의 데이터를 가져와야  한다
:         where b.ga_cgdt >= :stdt and b.ga_cgdt <= :endt else
:         where b.ga_jsdt >= :stdt and b.ga_jsdt <= :endt
:      if (:tpcd <> 'T') then
:          and substring(b.ga_krno from 1 for 1) = :tpcd
:      if (:jbcd <> '' ) then
:          and b.ga_jbcd = :jbcd
:      if (:wjcd <> '' ) then
:          and a.gc_clcd = :wjcd
:      --==============================================================
:      and a.gc_clcd <> ''
:     union all
:     select     --거래처별 계
:       cast(a.gc_clcd as varchar(5)) CODE,
:       cast('2' as varchar(1)) KUBN,
:       cast('' as varchar(40)) "외주처명",
:       cast('' as varchar(15)) "JOB NO",
:       cast('' as varchar(50)) "건   명",
:       cast('[소  계]' as varchar(20)) "구   분",
:       cast(sum(a.gc_amnt) as numeric) "외주금액",
:       case when max(a.gc_sngb) = '1' then cast(sum(a.gc_amnt) as numeric) end "선지급액",
:       cast('' as varchar(40)) "광고주명",
:       cast('' as varchar(3)) JBCD
:     from tr140t a
:           left outer join tr110t  b on a.gc_krno = b.ga_krno
:      if (:selt = '1') then   --청구월기준이면 청구기간의 데이터를 가져와야  한다
:         where b.ga_cgdt >= :stdt and b.ga_cgdt <= :endt else
:         where b.ga_jsdt >= :stdt and b.ga_jsdt <= :endt
:      if (:tpcd <> 'T') then
:          and substring(b.ga_krno from 1 for 1) = :tpcd
:      if (:jbcd <> '' ) then
:          and b.ga_jbcd = :jbcd
:      if (:wjcd <> '' ) then
:          and a.gc_clcd = :wjcd
:      and a.gc_clcd <> ''
:     group by a.gc_clcd
:     union all
:     select     --전체계
:       cast('ZZZZZ' as varchar(5)) CODE,
:       cast('2' as varchar(1)) KUBN,
:       cast('' as varchar(40)) "외주처명",
:       cast('' as varchar(15)) "JOB NO",
:       cast('' as varchar(50)) "건   명",
:       cast('[소  계]' as varchar(20)) "구   분",
:       cast(sum(a.gc_amnt) as numeric) "외주금액",
:       case when max(a.gc_sngb) = '1' then cast(sum(a.gc_amnt) as numeric) end "선지급액",
:       cast('' as varchar(40)) "광고주명",
:       cast('' as varchar(3)) JBCD
:     from tr140t a
:           left outer join tr110t  b on a.gc_krno = b.ga_krno
:      if (:selt = '1') then   --청구월기준이면 청구기간의 데이터를 가져와야  한다
:         where b.ga_cgdt >= :stdt and b.ga_cgdt <= :endt else
:         where b.ga_jsdt >= :stdt and b.ga_jsdt <= :endt
:      if (:tpcd <> 'T') then
:          and substring(b.ga_krno from 1 for 1) = :tpcd
:      if (:jbcd <> '' ) then
:          and b.ga_jbcd = :jbcd
:      if (:wjcd <> '' ) then
:          and a.gc_clcd = :wjcd
:      and a.gc_clcd <> ''
:   into :CODE,:KUBN,:"외주처명",:"JOB NO",:"건   명",:"구   분",:"외주금액",
:        :"선지급액",:"광고주명",:JBCD
:   do
:   suspend;
: end

+ -

관련 글 리스트
1561 [질문]FireBird 프로시져에서 if문 어찌 쓰나요? 아폴론 2026 2005/09/22
1564     Re:[질문]FireBird 프로시져에서 if문 어찌 쓰나요? 박성배 2210 2005/09/23
1566         Re: 저는 지금 절실한데요... 한번 더 살펴 주시겠습니까? 아폴론 1722 2005/09/23
1567             Re:Re: 저는 지금 절실한데요... 한번 더 살펴 주시겠습니까? 박지훈.임프 1903 2005/09/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.