1. ํ๋ก์์ ์์ฑ
๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ , ์์ , ํ๋ฒ ๊ฒ์, ์ด๋ฆ ๊ฒ์, ์ ์ฒด ๋ฆฌ์คํธ, ํ๊ท ๊ณ์ฐ
ํ๋ก์์ ์์ฑ ์ ์ ์์ฌํญ developer์์๋ ์๋ ์ปค๋ฐ์ด ๋์ง ์์ผ๋ฏ๋ก COMMIT ํด์ผํจ
%TYPE ํผ์ผํธํ์
ํน์ ํ ์ด๋ธ์ ํฌํจ๋์ด ์๋ ์ปฌ๋ผ์ ์๋ฃํ์ ์ฐธ์กฐํ๋ ๋ฐ์ดํฐ ํ์ ์ ์๋ฏธ
pHak score.hak%TYPE
pHak์ด๋ผ๋ ๋ณ์๋ช ์ ํ์ ์ score ํ ์ด๋ธ์ hak ์ปฌ๋ผ์ ํ์ ์ ๊ฐ์ ธ์์ ์ฐ๊ฒ ๋ค๋ ์๋ฏธ
1. SCORE ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ํ๋ก์์
CREATE OR REPLACE PROCEDURE insertScore
(
pHak IN score.hak%TYPE,
pName IN score.name%TYPE,
pBirth IN score.birth%TYPE,
pKor IN score.kor%TYPE,
pEng IN score.eng%TYPE,
pMat IN score.mat%TYPE
)
IS
BEGIN
INSERT INTO score(hak, name, birth, kor, eng, mat)
VALUES (pHak, pName, pBirth, pKor, pEng, pMat);
COMMIT;
END;
/
2. SCORE ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์์ ๋ ํ๋ก์์
CREATE OR REPLACE PROCEDURE updateScore
(
pName IN score.name%TYPE,
pBirth IN score.birth%TYPE,
pKor IN score.kor%TYPE,
pEng IN score.eng%TYPE,
pMat IN score.mat%TYPE,
pHak IN score.hak%TYPE
)
IS
BEGIN
UPDATE score SET name = pName, birth=pBirth,kor=pKor, eng =pEng, mat =pMat
WHERE hak = pHak;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20100, '๋ฑ๋ก๋ ์๋ฃ๊ฐ ์๋๋๋ค');
END IF;
COMMIT;
END;
/
์ฌ์ฉ์ ์๋ฌ์ฝ๋ ํจ์
RAISE_APPLICATION_ERROR( [์๋ฌ์ฝ๋], [์๋ฌ๋ฉ์์ง] )
์๋ฌ์ฝ๋ : -20000 ~ -20999 ์ฌ์ด์ ์ฝ๋
์๋ฌ ๋ฐ์ ์ ํจ์์์ ์ ์ํ ์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ
3. SCORE ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ํ๋ก์์
CREATE OR REPLACE PROCEDURE deleteScore
(
pHak VARCHAR2
)
IS
BEGIN
DELETE FROM score WHERE hak = pHak;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20100, '๋ฑ๋ก๋ ์๋ฃ๊ฐ ์๋๋๋ค');
END IF;
COMMIT;
END;
/
4. SCORE ํ ์ด๋ธ์์ ํ๋ฒ์ ๊ฒ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํ๋ก์์
CREATE OR REPLACE PROCEDURE readScore
(
pResult OUT SYS_REFCURSOR,
pHak IN VARCHAR2
)
IS
BEGIN
OPEN pResult FOR
SELECT hak, name, TO_CHAR(birth, 'YYYY-MM-DD') birth, kor, eng, mat,
kor+eng+mat tot, (kor+eng+mat)/3 ave
FROM score
WHERE hak = pHak;
END;
/
์๋ฐ์์ ๋งค๊ฐ๋ณ์ ํ๋ฒ์ ์ ๋ ฅ ๋ฐ์์ ์ค๋ผํด์ ๋๊ฒจ์ฃผ์ด์ผ ํด์ IN-OUT ์ฌ์ฉ
pResults๋ ๊ฒฐ๊ณผ ๊ฐ์ ๋ด๋ ๋ณ์. ์๋ฐ๋ก ๋๊ธธ ๊ฑฐ๋๊น OUT
pHak ๋ณ์๋ฅผ ์ ๋ ฅ ๋ฐ์ ์ค๋ผํด์์ ์ฟผ๋ฆฌ๋ฌธ์ ์จ์ผ ํ๋ฏ๋ก IN
5. SCORE ํ ์ด๋ธ์์ ์ด๋ฆ์ ๊ฒ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํ๋ก์์
CREATE OR REPLACE PROCEDURE searchNameScore
(
pResult OUT SYS_REFCURSOR,
pName IN VARCHAR2
)
IS
BEGIN
OPEN pResult FOR
SELECT hak, name, TO_CHAR(birth, 'YYYY-MM-DD') birth, kor, eng, mat,
kor+eng+mat tot, (kor+eng+mat)/3 ave
FROM score
WHERE INSTR(name, pName)>=1;
END;
/
ํ๋ฒ ๊ฒ์๊ณผ ๋์ผ
6. SCORE ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํ๋ก์์
CREATE OR REPLACE PROCEDURE listScore
(
pResult OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN pResult FOR
SELECT hak, name, TO_CHAR(birth, 'YYYY-MM-DD') birth, kor, eng, mat,
kor + eng+ mat tot, (kor+eng+mat)/3 ave,
RANK() OVER(ORDER BY (kor+eng+ mat)DESC) rank
FROM score;
END;
7. SCORE ํ ์ด๋ธ์์ ๊ตญ, ์, ์ ํ๊ท ์ ๊ณ์ฐํ๋ ํ๋ก์์
CREATE OR REPLACE PROCEDURE averagerScore
(
pKor OUT NUMBER,
pEng OUT NUMBER,
pMat OUT NUMBER
)
IS
BEGIN
SELECT NVL(AVG(kor), 0), NVL(AVG(kor), 0), NVL(AVG(mat), 0)
INTO pKor, pEng, pMat
FROM score;
END;
/
์๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด์ผ ํ๋ฏ๋ก OUT ์ด์ฉ
'๐ปProgramming > โ๏ธJava' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Transaction(ํธ๋์ญ์ ) (0) | 2022.08.24 |
---|---|
CallableStatement (0) | 2022.08.23 |
PreparedStatement ํ์ฉ (0) | 2022.08.22 |
PreparedStatement (0) | 2022.08.22 |
Statement (0) | 2022.08.19 |