PL/SQL에서 특정 칼럼에 값 증가시키기... 0 2 4,733

by 파이팅마모루 [PL/SQL] mamoru83 PL/SQL [2010.04.20 15:00:50]


공부를 하다가 예매 시스템을 작성해 보고 있습니다.

PL/SQL 을 통해서 예매 데이터를 입력받고, 해당 되는 좌석의 테이블 컬럼의 데이터에

좌석예매수를 증가시키는 방식의 프로시져를 짤려고 하는데요...


대략의 구조가...

예매 -> N좌석선택, 매수선택 -> 좌석예매수 테이블중 "N" 컬럼의 레코드를 매수만큼 증가.

이러한 구조입니다.


CREATE OR REPLACE PROCEDURE reservationData_insert
(
    i_reservationNo  IN  reservationData.reservationNo%TYPE,
    i_seat           IN  reservationData.seat%TYPE,
    i_sheet          IN  reservationData.sheet%TYPE,
    i_memberid       IN  reservationData.memberid%TYPE,
    i_sportscode     IN  reservationData.sportscode%TYPE,
    i_discountCode   IN  reservationData.discountCode%TYPE
)
IS
DECLARE
    v_seat CHAR(1) := i_seat;
    v_type CHAR(3) := 'F';
    v_sheet NUMBER(1) := i_sheet;
BEGIN
    INSERT INTO reservationData ( reservationNo, seat, sheet, memberid, sportscode, discountCode )
    VALUES ( i_reservationNo, i_seat, i_sheet, i_memberid, i_sportscode, i_discountCode );
   
    IF v_type = 'F' THEN
        UPDATE seatResDataF
        SET    v_seat = v_seat + v_sheet;
    END IF;

    COMMIT;
END reservationData_insert;



대략 이런방식의 구조인데요... 여기서 UPDATE 부분에서 좌석의 종류가 S,N,R 이런식으로 존재하는데요..

N좌석이 선택되어 넘어오면 N 컬럼의 레코드를 증가시키고 이런방식이 되야합니다.

변수명으로 칼럼명을 지정할수가 없네요.... (제가 PL/SQL을 시작한지 얼마안되서 ㅠ )


이걸 처리할 방법이 없을까요? v_seat가 N 이라는 레코드를 담고 있으면, seatResDataF 테이블에서 N 컬럼의

값을 증가 시킬수 있는방법이요... 도움좀 부탁드립니다. :)


by 마농 [2010.04.20 15:17:22]
다음과 같이 하나의 쿼리로 해결할수도 있구요.
그냥 If 문으로 Update 구문을 3개로 분기시켜도 되겠네요.

UPDATE seatResDataF
SET S = S + DECODE(v_seat, 'S', 1, 0)
, N = N + DECODE(v_seat, 'N', 1, 0)
, R = R + DECODE(v_seat, 'R', 1, 0)
WHERE 조건 <-- 이부분이 중요한데 빠진듯 하네요.
;

by 파이팅마모루 [2010.04.20 15:29:21]
마농님 정말로 감사드립니다. :)

덕분에 잘 해결했습니다. DECODE 라는걸 알게되고 둘러보기 해결이 되네요.
정말 큰 도움이 됐습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입