ORACLE (feat. CURSOR)
2293 ワード
CURSOR
커서의 선언(CURSOR 커서 이름)
-> 커서 열기(OPEN 커서 이름)
[ LOOP문으로 가져올 행이 없을 때까지 반복
-> 커서에서 데이터 가져오기(FETCH)
-> 데이터 처리
]
-> 커서 닫기 (CLOSE 커서 이름)
1.カーソルの使用
1.カーソルを使用してショッププログラムを作成し、会員の平均鍵を取得する
-- 커서가 포함된 스토어드 프로시저를 작성
CREATE OR REPLACE PROCEDURE cursorProc AS
v_height NUMBER; -- 회원의 키
v_cnt NUMBER := 0; -- 회원의 인원수(=읽은 행의 수)
v_total NUMBER := 0; -- 회원 키의 합계
-- (1) 커서 선언
CURSOR userCursor IS
SELECT height FROM userTbl;
BEGIN
-- (2) 커서 열기
OPEN userCursor;
-- (3) 커서에서 데이터 가져오기 및 (4) 데이터 처리
LOOP
FETCH userCursor INTO v_height;
EXIT WHEN userCursor%NOTFOUND; -- 데이터가 없으면 LOOP 종료
v_total := v_total + v_height;
v_cnt := v_cnt + 1;
END LOOP;
-- (5) 커서 닫기
CLOSE userCursor;
DBMS_OUTPUT.PUT_LINE('회원 키의 평균 ==>' || (v_total/v_cnt));
END;
-- 스토어드 프로시저 호출
SET SERVEROUTPUT ON;
EXECUTE cursorProc();
2.会員表(UserTBL)に会員等級列を追加し、等級を更新する
-- 회원 등급 열 추가
ALTER TABLE userTBL ADD grade NVARCHAR2(5);
-- 스토어드 프로시저 작성
CREATE OR REPLACE PROCEDURE gradeProc AS
v_id CHAR(8); -- 회원 아이디
v_total NUMBER(5) := 0; -- 총 구매액
v_grade NVARCHAR2(5); -- 회원 등급
-- (1) 커서 서언
CURSOR userCursor IS
SELECT U.userID, SUM(price*amount)
FROM buyTBL B
RIGHT OUTER JOIN userTBL U
ON B.userID = U.userID
GROUP BY U.userID, U.userName;
BEGIN
-- (2) 커서 열기
OPEN userCursor;
-- (3) 커서에 데이터 가져오기 (4) 데이터 처리
LOOP
FETCH userCursor INTO v_id, v_total;
EXIT WHEN userCursor%NOTFOUND; -- 데이터가 없으면 LOOP 종료
CASE
WHEN (v_total >= 1500) THEN v_grade := '최우수회원';
WHEN (v_total >= 1000) THEN v_grade := '우수회원';
WHEN (v_total >= 1) THEN v_grade := '일반회원';
ELSE v_grade := '유령회원';
END CASE;
UPDATE userTBL SET grade = v_grade WHERE userID = v_id;
END LOOP;
-- (5) 커서 닫기
CLOSE userCursor;
END;
-- 스토어드 프로시저 호출
EXEC gradeProc();
SELECT userID, userName, grade FROM userTBL;
Reference
この問題について(ORACLE (feat. CURSOR)), 我々は、より多くの情報をここで見つけました https://velog.io/@ansalstmd/ORACLE-feat.-CURSORテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol