Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- rss
- ror실행
- docker
- flex3
- 메일왕창보내는법
- Lift
- php
- 도커
- node.js web framework
- ejb
- nodejs express
- Cross
- 스킨 스쿠버
- 나의 취미
- iBatis
- 명사 분석기
- C/C++
- 명사 뽑아내기
- express for node.js
- 명사 추출기
- ajax
- 주식이야기
- php thumbnail
- 베트남어
- 책이야기
- 디즈니씨
- Node.js
- 나의 프로젝트
- Eclipse
- scala
Archives
- Today
- Total
nkdk의 세상
오라클 DB 설계 및 활용 11일째 1번 내용 본문
*** 계정(사용자) 생성 및 권한, 보안
*** 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;
*** 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;