/*
파라미터 타입
IN : SQL로 값 전달
OUT : program으로 값 전달
INOUT : SQL로 값 전달후 program으로 값 전달
*/
-- 테이블 생성
CREATE TABLE TEST_TB
(
COLUMN_01 INTEGER primary key,
COLUMN_02 NUMBER(5) NOT NULL,
COLUMN_03 VARCHAR2(10),
COLUMN_04 VARCHAR2(10),
COLUMN_05 VARCHAR2(10)
);
-- DROP TABLE TEST_TB;
---- 시퀀스 설정 ----------------------------------------------------------------------------------
/*
자동증가값 설정하기 (INCREMENT BY 1 = 1씩증가, START WITH 1 = 1부터 시작을 의미)
오라클에서는 시퀀스 설정과 테이블 매칭이 붙어있지 않고 별도로 설정되어 있음..
*/
CREATE SEQUENCE TEST_TB_SEQID INCREMENT BY 1 START WITH 1 ;
--DROP SEQUENCE TEST_TB_SEQID;
---- 커서 문법 ------------------------------------------------------------------------------------
-- DECLARE
-- 변수선언 테이블명.컬럼명%TYPE;
-- 변수선언 VARCHAR2(200);
-- ...
-- CURSOR 커서명 IS
-- 가져올 데이터(SELECT);
-- BEGIN
-- OPEN 커서명; -- 커서를 오픈
-- LOOP -- 루프를 돌면서 한 행씩
-- FETCH 커서명 INTO 변수명, ...; -- 컬럼값을 변수에 담는다(순서 중요)
-- EXIT WHEN 컬럼명%NOTFOUND; -- 해당로우를 발견할수 없다면 루프를 빠져나감
-- END LOOP
-- CLOSE 커서명; -- 커서를 닫음
-- END;
---- 커서 예제 ------------------------------------------------------------------------------------
-- SET serveroutput on --출력을 위해
DECLARE
COLUMN_01 VARCHAR2(30);
COLUMN_02 VARCHAR2(30);
COLUMN_03 VARCHAR2(30);
COLUMN_04 VARCHAR2(30);
COLUMN_05 VARCHAR2(30);
CURSOR cSor IS
SELECT * FROM TEST_TB;
BEGIN
OPEN cSor;
LOOP
FETCH cSor INTO COLUMN_01, COLUMN_02, COLUMN_03, COLUMN_04, COLUMN_05;
EXIT WHEN cSor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(COLUMN_01 || chr(9) || COLUMN_02); -- 데이터를 확인하기위해 출력
END LOOP;
CLOSE cSor;
END;
---- 프로시저 문법 --------------------------------------------------------------------------------
-- CREATE OR REPLACE PROCEDURE 프로시저명
-- (
-- 변수선언 IN VARCHAR2(200) ,
-- 변수선언 OUT VARCHAR2(200) , -- 변수 사용시
-- ...
-- )
-- IS
-- CURSOR 커서명 IS
-- 가져올 데이터(SELECT);
--
-- 변수선언 -- 변수 사용시
--
-- BEGIN
-- OPEN 커서명; -- 커서를 오픈
-- LOOP -- 루프를 돌면서 한 행씩
-- FETCH 커서명 INTO 변수명, ...; -- 컬럼값을 변수에 담는다(순서 중요)
-- EXIT WHEN 컬럼명%NOTFOUND; -- 해당로우를 발견할수 없다면 루프를 빠져나감
-- END LOOP
-- CLOSE 커서명; -- 커서를 닫음
-- END;
---- SELECT 프로시저 생성 -------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE SELECT_PROC_01
IS
CURSOR cSor IS
SELECT COLUMN_01, COLUMN_02 FROM TEST_TB; -- 커서
AAA VARCHAR2(30); -- 변수사용
BBB VARCHAR2(30); -- 변수사용
BEGIN
OPEN cSor;
LOOP
FETCH cSor INTO AAA, BBB; -- 커서의 컬럼갯수와, 변수의 갯수가 일치해야 한다
EXIT WHEN cSor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(AAA || chr(9) || BBB);
END LOOP;
CLOSE cSor;
END
;
/
-- 프로시저 실행 (다른창에서 실행해야 함)
SET serveroutput on --출력을 위해
EXECUTE SELECT_PROC_01();
---- Insert 프로시저 생성 -------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE INSERT_PROC_01
(
Column02 IN NUMBER,
Column03 IN VARCHAR2,
Column04 IN VARCHAR2,
Column05 IN VARCHAR2
)
IS
BEGIN
INSERT INTO TEST_TB
(
COLUMN_01 ,
COLUMN_02 ,
COLUMN_03 ,
COLUMN_04 ,
COLUMN_05
)
VALUES
(
TEST_TB_SEQID.NEXTVAL, -- 자동증가
Column02 ,
Column03 ,
Column04 ,
Column05
);
END;
/
-- DROP PROCEDURE INSERT_PROC_01;
-- SELECT * FROM TEST_TB;
-- 프로시저 실행 (다른창에서 실행해야 함)
SET serveroutput on --출력을 위해
EXECUTE INSERT_PROC_01 (12,'13','14','15');
EXECUTE INSERT_PROC_01 (22,'23','24','25');
-- Update 프로시저 생성 ---------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE UPDATE_PROC_01
(
Column01 IN INTEGER,
Column02 IN NUMBER,
Column03 IN VARCHAR2,
Column04 IN VARCHAR2,
Column05 IN VARCHAR2
)
IS
BEGIN
UPDATE TEST_TB
SET COLUMN_02 = Column02,
COLUMN_03 = Column03,
COLUMN_04 = Column04,
COLUMN_05 = Column05
WHERE
COLUMN_01 = Column01;
END;
/
-- DROP PROCEDURE UPDATE_PROC_01;
-- SELECT * FROM TEST_TB;
-- 실행
SET serveroutput on --출력을 위해
EXECUTE UPDATE_PROC_01 (1, 102, '103', '104', '105');
-- Delete 프로시저 생성 ---------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE DELETE_PROC_01
(
Column01 IN INTEGER
)
IS
BEGIN
DELETE FROM
TEST_TB
WHERE
COLUMN_01 = Column01;
END;
/
-- DROP PROCEDURE DELETE_PROC_01;
-- SELECT * FROM TEST_TB;
-- 실행
SET serveroutput on --출력을 위해
EXECUTE DELETE_PROC_01 (1);
2012년 3월 18일 일요일
오라클 저장프로시저 생성
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기