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

FireBird Q&A
[577] Re:[질문]서버쿼리에 관한 질문입니다
HANULEYE [] 2233 읽음    2002-12-23 10:44
갈매기 님이 쓰신 글 :
: 인터베이스는 서버쿼리가 안되나요?
: 예를 들면
:   select a.Accunit, a.custcd, b.start, c.endd, a.price  from Tcustrevprice a,
:   (Select x.accunit, x.custcd, x.Load start  from TcustRev x, TcustRevPrice y
:       where x.seq = y.SSeq
:         and x.accunit = y.accunit
:         and x.custcd = y.custcd) b,
:   어쩌구 저쩌구....
: 뭐 이런식으로요..
: 오라클하고 인터베이스하고 차이가 많이 나나요?
:
: 고수님의 빠른 답변 부탁드립니다.
:
: 즐거운 주말 되세요~~~
:

여기 검색에서 INLINE VIEW 찾아보심 답이 있을 겁니다...
EMPLOYEE.GDB를 예로 들겠습니다...

스토어드 프로시저를 만듭니다...
호출시에 INPUT 파라미터가 있다면 RETURES 위에 선언해주시면 되구여...

COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE GET_JOB_TITLE
RETURNS
(
  JOB_CODE VARCHAR(5),
  JOB_GRADE SMALLINT,
  JOB_COUNTRY VARCHAR(15),
  JOB_TITLE VARCHAR(25)
)
AS
BEGIN EXIT; END ^


ALTER PROCEDURE GET_JOB_TITLE
RETURNS
(
  JOB_CODE VARCHAR(5),
  JOB_GRADE SMALLINT,
  JOB_COUNTRY VARCHAR(15),
  JOB_TITLE VARCHAR(25)
)
AS
begin
  FOR SELECT JOB_CODE, JOB_GRADE, JOB_COUNTRY, JOB_TITLE
    FROM JOB
  INTO :JOB_CODE, :JOB_GRADE, :JOB_COUNTRY, :JOB_TITLE
  DO
    suspend;
end
^

SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;

아래와 같은 SELECT 문을 적습니다...

SELECT A.*, B.JOB_TITLE
FROM EMPLOYEE A
INNER JOIN GET_JOB_TITLE B
ON A.JOB_CODE = B.JOB_CODE
AND A.JOB_GRADE = B.JOB_GRADE
AND A.JOB_COUNTRY = B.JOB_COUNTRY

또는
SELECT A.*, B.JOB_TITLE
FROM EMPLOYEE A, GET_JOB_TITLE B
WHERE A.JOB_CODE = B.JOB_CODE
AND A.JOB_GRADE = B.JOB_GRADE
AND A.JOB_COUNTRY = B.JOB_COUNTRY

위 처럼 호출하시면 인라인뷰와 같은 결과를 얻을 수 있을 겁니다....

서브쿼리일경우는
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE SUB_JOB_TITLE
(
  JOB_CODE VARCHAR(5),
  JOB_GRADE SMALLINT,
  JOB_COUNTRY VARCHAR(15),
)
RETURNS
(
  JOB_TITLE VARCHAR(25)
)
AS
BEGIN EXIT; END ^


ALTER PROCEDURE SUB_JOB_TITLE
(
  JOB_CODE VARCHAR(5),
  JOB_GRADE SMALLINT,
  JOB_COUNTRY VARCHAR(15),
)
RETURNS
(
  JOB_TITLE VARCHAR(25)
)
AS
begin
  FOR SELECT JOB_TITLE
    FROM JOB
    WHERE JOB_CODE = :JOB_CODE
    AND JOB_GRADE = :JOB_GRADE
    AND JOB_TITLE = :JOB_TITLE
  INTO :JOB_TITLE
  DO
  BEGIN
    suspend;
    EXIT;
  END
end
^

SELECT A.*,
(SELECT JOB_TITLE FROM SUB_JOB_TITLE(A.JOB_CODE, A.JOB_GRADE, A.JOB_COUNTRY)) JOB_TITLE
FROM EMPLOYEE A

위 처럼 호출하시면 서브쿼리가 되겠지여....


+ -

관련 글 리스트
515 [질문]서버쿼리에 관한 질문입니다 갈매기 1944 2002/11/23
577     Re:[질문]서버쿼리에 관한 질문입니다 HANULEYE 2233 2002/12/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.