프로스져 작성중 검색할 컬럼명을 변수로 사용하려 하는방법에 대해.. 0 3 10,321

by 파이팅마모루 [PL/SQL] PL/SQL 칼럼 변수 [2010.05.17 15:46:37]


-- 결재 데이터를 추가하는 프로시져

CREATE OR REPLACE PROCEDURE payData_insert
(
    -- 입력받는 기본 데이터
    i_reservationNo  IN  payData.reservationNo%TYPE,
    i_payMethod      IN  payData.payMethod%TYPE
)
IS
    -- 데이터 처리에 사용할 변수
    v_payCost NUMBER(8) := 0;
    v_discountRate FLOAT(5) := 0;
    v_seatCost NUMBER(8) := 0;
    v_sheet reservationData.sheet%TYPE;
    v_sportsCode reservationData.sportsCode%TYPE;
    v_seat reservationData.seat%TYPE;
   
    strSql VARCHAR(1000);
   
BEGIN

    -- 경기코드를 변수에 저장
    SELECT reservationData.sportsCode INTO v_sportsCode
    FROM reservationData
    WHERE reservationData.reservationNo = i_reservationNo;
   
    -- 예매된 좌석형태를 변수에 저장
    SELECT reservationData.seat INTO v_seat
    FROM reservationData
    WHERE reservationData.reservationNo = i_reservationNo;
   
    SELECT v_seat INTO v_seatCost
    FROM playinfo, stadiumSeatCostF
    WHERE playinfo.sportsCode = v_sportsCode AND
          stadiumSeatCostF.stadiumCode = playinfo.stadiumCode;

    -- 할인율/가격을 변수에 저장
    SELECT discount.discountRate INTO v_discountRate
    FROM reservationData, discount
    WHERE reservationData.discountCode = discount.discountCode AND
          reservationData.reservationNo = i_reservationNo;
         
    -- 예매매수를 변수에 저장
    SELECT reservationData.sheet INTO v_sheet
    FROM reservationData
    WHERE reservationData.reservationNo = i_reservationNo;
         
    IF v_discountRate >= 1 THEN
        v_payCost := ( v_seatCost - v_discountRate ) * v_sheet;
    END IF;

    -- 입력된 데이터를 insert
    INSERT INTO payData ( reservationNo, payState, payCost, payMethod )
    VALUES ( i_reservationNo, 'N', v_payCost, i_payMethod );
       
    COMMIT;
   
END payData_insert;


-------------------------------------------------------------------------------------------------------------

프로시져 작성중 궁금한 점이 있어서 질문 드립니다.

위에 빨간색으로 표시한 부분이 좌석의 구역번호(N,S,E,W)를 의미하는데요,

다른 테이블에 구역에 따라 좌석의 가격이 들어가 있는데 그것을 구하려 합니다.

검색할 칼럼명을 변수로 해서 계속 바꿔주면서 검색하고 싶은데..

v_seat의 값이 v_seatCost 로 들어가리더라구요... 검색할 칼럼명인 v_seat를 변수로해서

사용하는 방법은 없는건지 궁금합니다.


by 마농 [2010.05.17 16:47:07]
strSql := 'SELECT ' || v_seat
|| ' FROM playinfo, stadiumSeatCostF'
|| ' WHERE playinfo.sportsCode = :v_sportsCode'
|| ' AND stadiumSeatCostF.stadiumCode = playinfo.stadiumCode';

EXECUTE IMMEDIATE strSql INTO v_seatCost USING v_sportsCode;

by 파이팅마모루 [2010.05.17 16:53:06]
마농님 정말 감사드립니다.

지난번에도 마농님께 도움 받았던거 같은데. 정말 죄송한데요...
제가 아직 초보라 그런데, ' WHERE playinfo.sportsCode = :v_sportsCode'
부분의 : 에 대해서 좀 여쭤봐도 될까요!?

by 마농 [2010.05.17 17:05:56]
바인드 변수죠.
using 절에서 입력한 값이 들어가는 자리.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입