PLSQL Oracle 기초지식

귀찮은개발자·2022년 7월 28일
0

Oracle PL/SQL

목록 보기
1/1

PLSQL 프로그래밍

사실 이걸 배울필요성을 느끼진 못했다.
왜냐하면..jsp나 spring에서는 쓰진 않기 때문이다.
하지만 연봉을 더 높이기 위해서는 배워야 되겠다고 생각했다.
그래서 배운것들을 차근차근정리해나가보려고한다.
필자는 CMD로 작성을 하였다.

PL/SQL(Oracle's Procedural Language extension to sql) = 오라클에서 SQL을 사용하는 프로그래밍 언어이다. 절차적 프로그래밍 언어다.

PLSQL 사용이유

  1. 대용량 데이터 연산을 할때 WAS등의 서버로 전송해서 처리하려면 네트워크에 부하가 많이 걸릴수 있음. 이때 프로시져나 함수를 사용하여 데이터 연산 및 가공후 최종결과만 서버에 전송하면 부담은 많이 감소한다.

  2. 로직을 수정하기 위해 서버를 셧다운 시키지 않아도 됨. 서버에서는 단순히 DB에 프로시저를 호출하여 사용하면됨.

3.쿼리문을 직접 노출하지 않는 만큼, SQL injection의 위험성 감소(보안성)

  1. 블록단위로 유연하게 사용가능

  2. SQL명령어에서 불가능했던 프로그래밍이 가능하다.(함수처리나 다른부분등)

-단점-
1. 유지보수 힘듬.

  1. 대용량 데이터 처리가 많을경우 DB에 부하를 줄수있다.

3.Git등의 형상관리툴 사용 불가능(저는 이게 가장 큰 단점이라고 생각함)

is(as)선언부
begin-실행
exception - 예외처리
end;

◈블록 : PL/SQL의 기본단위. 선언부, 실행부, 예외처리부로 구성이 도이었음
◈이름부 : 블록의 명칭이 오고, 생략시 익명블록이 사용됨(명칭은 함수, 프로시저 가능)
◈선언부 : declare로 시작, 실행과 예외처리에서 사용할 변수, 상수, 커서를 선언. 문장끝에 반드시 세미클론(;)을 찍을것.
◈실행부 : 실제 로직을 처리한다.
◈예외처리부 : 로직을 처리하다가 오류가 발생하면 처리할 내용을 기술하는 방법으로 생략가능.

//문법
set serveroutput on
set verify off
declare
	v_num number := 100;
begin
	dbms_output.put_line(v_num);
end;
/--실행문 슬래시

cmd 작성시 주의사항.

ed1(SQL page 메모장 생성. ed[이름명])
@1(SQL page 실행. @[이름명])
선언부(declare) 위에 아래 명령어를 작성한뒤 작업할것.
메모장 작업시 ANSI로 두고 작업(한글깨짐 방지를 위함. 메모장 default값은 window10 기준UTF-8)

set serveroutput on // serveroutput(서버에서 받는 값 설정. default값은 serveroutput off)
set verify off//명령어나 PLSQL에서 &를 이용한 치환변수등을 
//사용할때 치환되기 전/후의 자세한 값을 표시할 것인지의 여부. 기본값은 ON.
public void PrintNUM(){
	int v_num = 100;
	System.out.println(vi_num);
}
//자바와 비교를 해보면 어느정도 유사한점을 생각해볼수 있다.	

IS와 END는 함수의 스코프, 즉 자바의 중괄호와 비슷하다.
그리고 IS는 변수를 변수를 선언한다.(익명블록을 사용하였기에 생략.)

선언부에 사용할 지역변수를 선언하고 초기화(default값을 넣어주는 행위)를 한다음 실행부에서 작동하는 로직을 코드로 작성한뒤 try catch로 예외처리를 한다.

PL/SQL 블록의 종류에는 익명블록, 함수, 프로시저가 있다.

PL/SQL의 기본 구조

IS(AS) --선언부

Begin --살행부

Exception --예외처리부

end;--종료선언(코드종료)

PL/SQL의 구성요소

변수명 :=default value

으로 선언하며 SQL DATA Type을 모두 사용가능. 따로 PL/SQL data type을 사용가능.
상수

변수명 CONST data type := static value

변하지 않는 값[상수] 는 const로 선언(C와 동일) 예약어는 const이다.

PL/SQL Data Type
Boolean : True and false and null
PLS_INTEGER : -2,147,483,648~+2,147,483,647 NUMBER 에 비해 비교적 공간 적게 차지.

아래는 하위 타입들로 PLS_INTEGER 범위 안에 속하면서 각자 특성을 지님
1. NATURAL : 음수 제외.
2. NATURALN : 음수제외 및 NULL할당 불가능. [선언시 초기화가 필요]
3. POSITIVE : 양수
4. POSITIVEN : 양수인데 NULL할당불가능.[선언시 초기화 필요]
5. SIGNTYPE : -1,O,1
6. SIMPLE_INTEGER : NULL이 아닌 모든값. [선언시 초기화 필요]

BINARY_INTEGER : PLS_INTEGER Type과 동일.

연산자

식별자기능
**제곱
+,-양/음수
*,/곱셈, 나눗셈
+,-더하기, 뺄셈
=,<,>,<=,>=,!=,~=,^=, Is Null, Like , Between, In비교연산자
NOT~와 같지않은
ANDA와 B 포함
ORA와 B중 둘중하나

|| : 문자열연결.(더하기,뺄셈과 동급)
밑에서 위로 갈수록 우선순위 증가

▣PL/SQL에서 사용할수 있는 SQL문은 DML문이며 DDL문은 사용할수 없다. 방법은 없는것은 아니지만, 일반적인경우는 아니다.

SQL형식명령어설명
DDL(Data Definition Language)Create,Alter,Drop,TrunCreateDDL은 정의,수정,삭제등으로 이루어져있으며, DataBase의 Schema를 정의및 조작하기 위해 사용을 한다. 기본적으로 Commit을 탑재하고 있다.
DML(Data Manipulation Language)Select,Insert,Delect,Update,Lock,Explain,call데이터를 조작(조회,추가,변경,삭제)하기 위해 사용. 실질적인 데이터 처리를 위해서 주로 사용한다.
DQLDataQuery Language(select)DML에서 select만을 따로 분리하여 간단히 query로 표현
DCL(Data Control Langage)commit,rollback,grant,revoke데이터 제어언어. 데이터의 보안, 무결성,회복, 병행 수행제어 등을 정의하는데 사용.
TCL(Transaction Control Language)Commit,RollBackCommit과 RollBack을 따로 분리하여 TCL로 부르기도함

트랜잭션에 관해선 다음 포스팅에서 자세히 설명
▣select 절 안에서 변수에 값을 넣을때는 반드시 into절을 사용해야만 함.

set serveroutput on
set verify off

declare 
	v_name varchar2(10);
begin
	select ename
    into v_ename
    from emp
    where empno = 100;
dbms.output.put_line('이름:'||v_ename);
end;
/

선언부에서 변수 타입에 %TYPE를 사용하면 테이블안의 컬럼과 같은 타입으로 설정이 가능.

declare
	v_ename emp.ename%type;
begin
	select ename
    into v_ename
    from emp
    where empno = 100;
dbms_output.put_line('이름 : '||v_ename);
end;
/

% = pointer

Pragma(트리거)


컴파일러가 실행되기 전에 처리하는 전처리기의 역할을 하며 컴파일러는 런타임 때와는 다른 결과를 내도록 동작함.
컴파일 할때 뭔가를 먼저 처리하라고 컴파일러에게 지시하는역할.
블록 선언부에 명시를 한다.(C와 C++에서도 동일한 명령어다. #pragma once)

PRAGMA AUTONOMOUS_TRANSACTION
트렌잭션 처리를 담당. 주 트랜잭션이나 다른 트랜잭션에 영향을 받지 않고 독립적으로 현재 블록 내부에서 데이터베이스에 가해진 변경사항을 COMMIT 하거나 ROLLBACK하라는 지시를 내림.

PRAGMA EXCEPTION_INIT(예외명, 예외번호)
사용자 정의 예외를 처리할때 사용. 특정 예외번호를 명시하여 컴파일러에 이 예외를 사용하라는 것을 알리는 역할을 함.

PRAGMA RESRICT_REFERENCES(서브 프로그램명, 옵션)
Oracle package를 사용할때 선언 해 놓으면 패키지에 속한 서브프로그램(주로 function에 사용) 옵션값에 따라 특정 동작을 제한할 때 사용.

PRGMA SERIALLY_RESUABLE
Package 메모리 관리를 쉽게 할 목적으로 사용. 패키지에 선언된 변수에 대해 한번 호출된후에 메모리를 해제시킴.[pointer free()] 이 옵션을 설정하게 되면, Package variable에 값을 할당하더라도 다음번에 호출할때는 할당한 값에 대한 메모리를 해제시켜 해당 변수는 초기화 값이나 null이 됨.

라벨(Label): PL/SQL 프로그램 상 특정부분에 이름을 부여할 수 있는 것을 라벨이라고 하고 <<[라벨명]>> 형태로 사용함.
라벨을 붙이면 가독성도 좋고 소스관리도 쉬우며 특정 조건에 따라 GOTO문으로 이후 로직을 처리하지 않고 특정라벨로 이동이 가능하며, 반복문에 라벨을 붙이면 exit문으로 반복문 블록을 빠져나오게 할수도 있음.


  • 그 외
    입출력은 블록단위로 이루어진다.
    heap 메모리에 저장된다.
profile
풀스택, 인공지능,언리얼,유니티등을 하고 있는 귀찮은개발자라고 합니다.

0개의 댓글