-
Procedure - 프로시저프로그래밍/DBMS 2021. 12. 3.반응형
select * from user_procedures;
해당 계정의 모든 프로시저 목록 확인
-- 인서트 프로시저 CREATE OR REPLACE PROCEDURE insertScore ( pHak In VARCHAR2, 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; / EXEC insertScore('7878', '호호호', '2000-10-10', 80, 90, 90);
insert 프로시저
CREATE만 써도 되지만 나중에 수정을 위해서 OR REPLACE 도 붙이는 편이 좋다.
(
이 부분에 들어가 있는 pHak 등등 애들은 변수(파라미터) 이다.
)
pHak = 변수명 / IN 뒤에 있는건 변수의 형태 VARCHAR2처럼 직접 형식을 지정할 수 도 있고,
score.name%TYPE 처럼 score 테이블의 name의 타입과 같이하라 처럼 어떤 컬럼의 형식을 그대로 따라가게 할 수 있다.
IS 부분은 파라미터 안에서만 쓰는 프로시저 내의 변수이다.
여기서는 프로시저 내의 변수는 사용하지 않으니 그냥 IS만 쓰고 건너 뛴다.
BEGIN 부분은 실제로 쿼리문을 작성하는 곳 COMMIT은 반드시 필요함
만든 프로시저는 EXEC 명령어를 사용해서 이용.
-- update 프로시저 CREATE OR REPLACE PROCEDURE updateScore ( pHak In VARCHAR2, 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 UPDATE score SET name=pName, birth=pBirth, kor=pKor, eng=pEng, mat=pMat WHERE hak=pHak; COMMIT; END; / EXEC updateScore('7878', '가가가', '2000-10-10', 80, 90, 90);
업데이트 프로시저
CREATE OR REPLACE PROCEDURE deleteScore ( pHak In VARCHAR2 ) IS BEGIN DELETE FROM score WHERE hak=pHak; COMMIT; END; / EXEC deleteScore('7878');
삭제 프로시저
-- 데이터 개수 CREATE OR REPLACE PROCEDURE countScore ( pResult OUT NUMBER ) IS BEGIN SELECT COUNT(*) INTO pResult FROM score; END; /
데이터의 개수 구하는 프로시저
SELECT문의 결과를 pResult에 담는다.
자바로 결과 보낼때는 OUT
자바에서 결과 받을때는 IN
-- 리스트 CREATE OR REPLACE PROCEDURE listSCore ( pResult OUT SYS_REFCURSOR, pStart IN NUMBER, pEnd IN NUMBER ) IS BEGIN OPEN pResult FOR SELECT * FROM ( SELECT ROWNUM rnum, tb.* FROM ( 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 ) tb WHERE ROWNUM <= pEnd ) WHERE rnum >= pStart; END; /
리스트 출력 프로시저
자바에서 start, end 파라미터 받아서 사용하는 모습
그리고 결과값은 내보내는 모습
-- 하나의 레코드 가져오기 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 FROM score WHERE hak = pHak; END; /
하나의 레코드 가져오는 프로시저
반응형'프로그래밍 > DBMS' 카테고리의 다른 글
오라클 - 서버 연결 안될 때 (0) 2022.01.12 오라클 - 데이터 백업 하기 (0) 2022.01.10 데이터베이스 모델링 / 정규화(정규형) (0) 2021.09.02 자바 오라클 DB(디비) 연동하기 /Maven Project (0) 2021.08.25 오라클 계정 삭제 및 재추가 (0) 2021.08.25