관리 메뉴

nkdk의 세상

오라클 DB 설계 및 활용 11일째 1번 내용 본문

My Programing/DataBase

오라클 DB 설계 및 활용 11일째 1번 내용

nkdk 2008. 3. 7. 20:40
*** 계정(사용자) 생성 및 권한, 보안

*** PL/SQL 및 저장 프로시저(STORED PROCEDURE)
SQL 에 절차적인 언어를 포함시켜 만튼 것을 PL/SQL 이라고 한다.
변수, 조건문, 반복문 등과 같은 프로그래밍 기법을 구사할 수 있어 SQL 처리를 좀 더 빠르고도 효과적으로 할 수 있다.
기본 구조는 DECLARE(선언부)~BEGIN(실행부)~EXCEPTION(예외처리부)~ END 로 이루어 진다.
이러한 PL/SQL 문을 하나의 단위로 묶어 DB에 저장 한 후 실행할 수 있는데 이를 저장 프로시저하고 한다.
(SQL용 프로그램 언어라고 생각하면 된다. 나중에 용도로는 많은 용도로 사용 할 수가 있다.)

(( 유의할 점은 값을 넣을 때 := 로 넣는 다는 점과 END 와 비긴으로 꼭 묶어 준다는 것이다. ))

DROP TABLE AA;
CREATE TABLE AA (BUN NUMBER,MUNJA VARCHAR2(10),SU NUMBER);
SELECT * FROM AA;

--변수 선언

DECLARE NO NUMBER :=0;
BEGIN
NO :=500+600;
INSERT INTO AA(BUN) VALUES(NO);
END;

SELECT * FROM AA;


--IF, WHILE 문을 이용한다.

DECLARE V_A NUMBER := 0; V_B NUMBER := 0;
BEGIN
WHILE V_A <10 LOOP
V_A := V_A + 1;
IF MOD(V_A,2) =0 THEN
V_B := V_B +10;
INSERT INTO AA VALUES(V_A,'짝',V_B);
ELSE
V_B := V_B + 3;
INSERT INTO AA VALUES(V_A,'홀',V_B);
END IF;
END LOOP;
END;

--해당 테이블 형으로 변수 선언
(참고: SAWON%ROWTYPE 라는 SAWON테이블 변수형을 선언하였습니다.)

DECLARE V_A SAWON%ROWTYPE;
BEGIN
SELECT * INTO V_A FROM SAWON WHERE SAWON_NO=1;
INSERT INTO AA VALUES (V_A.SAWON_NO,V_A.SAWON_NAME,V_A.SAWON_PAY);
END;

--한개의 레코드 밖에 읽지 못해서 WHERE를 써서 하나 지정해 줘야 한다.. 여러개 할려면 다른 방법을 써야한다.



--해당 테이블 컬럼형으로 변수 선언

DECLARE
A SAWON.SAWON_NO%TYPE;
B SAWON.SAWON_NAME%TYPE;
C SAWON.SAWON_PAY%TYPE;
BEGIN
SELECT SAWON_NO,SAWON_NAME,SAWON_PAY INTO A,B,C FROM SAWON WHERE SAWON_NO=3;
INSERT INTO AA VALUES(A,B,C);
END;

--조건 판단문 IF


DECLARE
V_A SAWON%ROWTYPE;
V_STR VARCHAR2(10);
BEGIN
SELECT * INTO V_A FROM SAWON WHERE SAWON_NO=5;
IF(V_A.BUSER_NUM=10) THEN
V_STR := CONCAT(V_A.SAWON_NAME,'10');
END IF;
IF(V_A.BUSER_NUM=20) THEN
V_STR := CONCAT(V_A.SAWON_NAME,'20');
END IF;
IF(V_A.BUSER_NUM=30) THEN
V_STR := CONCAT(V_A.SAWON_NAME,'30');
END IF;
IF(V_A.BUSER_NUM=40) THEN
V_STR := CONCAT(V_A.SAWON_NAME,'40');
END IF;
INSERT INTO AA VALUES (V_A.SAWON_NO,V_STR,V_A.SAWON_PAY);

END;


--반복문 FOR (2단 구구단을 넣었다.)

DECLARE
DAN NUMBER(2) :=2;
I NUMBER(2) :=0;
TOT NUMBER :=0;
BEGIN
FOR I IN 1..9 LOOP
TOT := DAN * I;
INSERT INTO AA VALUES(I,'=',TOT);
END LOOP;
END;