갈매기 님이 쓰신 글 :
: 인터베이스는 서버쿼리가 안되나요?
: 예를 들면
: 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
위 처럼 호출하시면 서브쿼리가 되겠지여....
|