카테고리 없음

[DATABASE][PL/SQL]

우주 코더 2018. 4. 23. 11:14




PL/SQL


sql에서 쓰지 못하는  것은 pl을 통해서  사용할 수 있다

복잡한 프로그램을 다룰ㄹ 때 많이 쓴다 



PL/SQL이란?

PL/SQL은Oracle’s Procedural Language extension to SQL의 약자 SQL 문장에서  변수 정의

,조건처리(IF),반복처리(LOOP,WHILE,FOR)등을 지원 하는 오라클자체에 내장되어 있는 절차적 

언어  ( Procedure Language)로 SQL의 단점을 보완해준다 


PL/SQP은 SQP에 없는 기능 을 제공한다 

-변수 선언을 할수 있다 

-비교 처리를 할수 있다 

-반복 처리를 할수 있다



PL/SQP 장점

-BEGIN~END와 같은 블록 구조를 가지므로  블록안의  여러 SQL 구문이 한번에 서버로 전송되므로 수행속도가 향상되고 통신량을 중링 수있다 

-블록안에 또 다른 블록을  포함하는 형태로 코드를 포하마하는 형태로 코드를 모듈화 할 수 이있다 

-단일형 데이터 타입 (SCALAR DATA TYPE),복합데이터 타입 (COMPOSITE DATA TYPE),상수등 여러 형태의 변수 선어이 가능하다

-테이블의 컬럼을 참조하는 동적 변수를 정의 할수 있다 (%TYPE,%ROWTYPE)

-IF문과 같은 조건문을 사용할 수있다 

-LOOP~END LOOP,FOR..LOOP~END LOOP,WHILE..LOOP~END LOOP와 같은 반복문을 사용할수 있다 

-Eception절을 아용하여 프로그래밍 언어처럼 예외(오류)를 처라 할수 있으며 사용자 정의 예외의 사용도 가능하다



PL/SQL





PL/SQP 프로그램작성 요령


-PL/SQP 블록 내에서느 한 문장이 종료 할때마다 세미콜론을 사용한다 

-END문 뒤에 :을 사용하여 하나의 블록이 끝났다응 것을 명시한다

-PL/SQP 블록의 작성은 편집기를 통해 파일로 작성할 수 도있고 ,프롬프트에서 바로 작성할 수 있다 

-SQP*PIUS환경에서는DECLARE나 BEGIN이라는 키워드로 PL/SQP 블록아 시작하는 것을 알 수 있다

-PL/SQP 블록은 행에/가 있으면 종결 된다. 





변수 


-변수 선언

변수는 사용하기에 앞서 먼저 선언이 되어 있어야 하는 데 선언부에서는 변수 명 다음에 자료형을 기술한다.이렇게 선언된 실해부에서 사용됨.

-형식

변수이름 [CONSTRAINT]데이터 타입[NOT NULL]

[:=|DEFAULT EXPRESSION];

-변수의 값 지정

변수 이름:=상수,다른 변수 ,연산자나 함수를 포함하는 표현식




-변수의 종류




-단순 변수 스칼라변수  


스칼라변수란=기본 타입 변수라 생각하면 된다

PL/SQP에서 변수를 선언할때 지정하는 자료형은 숫자를 지정하려면 NUMBER 를 사용하고, 문자를 지정하려면  VARCHAR2를 사용해서 선언한다

즉, 단일 값을 가지는 변수의 데이터형을 직접 지정해주는 변수,즉 정수,실수 이런 형태를 직접 지정해주는 변수를 스칼라 변수라고 한다


-참조변수-%TYPE

참조 변수란 ? 많이 쓰임 타입을 불러오는 것이라 생각하면된다 특정 칼럼의 타입만 불러 온다고 생각하면된다

데이터 형을 다른 컬럼에서 참조 후 지정하는 방식의 변수 


1.%TYPE :이전에 선언된 다른 변수 또는 데이터베이스의 칼럼에 맞추어 변수를 선언하기 위해 사용 

형식:변수명 참조할테이블명.테이블의 컬럼명%TYPE:

TYPE변수를 사용하여 데이터 조회하기 





TYPE 변수를 사용하여 데이터 조회하기  INTO는 어디안에 뮈를 넣겠다INTO=하나하나 씩만 넣을 수 있다 WHERE조건 이해하기 쉽다




-데이터를 넣을 때 여러게를 동시에 넣으려고 하면 에러가 난다

EX_ID와 EX_NAME은 테이블 안의 컬럼들의 타입을 참조하고 있는 변수 이므로 하나의 값만 저장할 수 있다 즉,WHERE절을 쓸 때에는 슈퍼키에 해당하는 컬럼의 데이터를 조회 값만이 변수에 저장 될 수 있다  

-데이터의 타입만 같다면 참조한 컬럼이 아니라 다른 컬럼을 참조 받은 변수에도 값이 정상적으로 들어간다.

참조할 때 적은컬럼 명의 순서와 값을 넣어줄 변수들을 적은 순서가 서로 배칭된다(타입이 다르면 에러남)



%ROWTYPE:%TYPE이 컬럼 단위로 참조한다면 로우 단위로 참조하는 %ROWTYPE이 있다 해에 타입을 가져오는 것 NUMBER ,VACHAR등 을 가져오는 것이다 비효율적인것 자신이 원하는 것만 뽑아 오지 못한다 

형식:변수명 참조할테이블명%ROWTYPE:

%ROWTYPE을 사용 시 장점은 특정 테이블릐 컬럼의 개수와 데이터 형식을 모르더라도 지정할 수 있다는 것이다.SELECT 문장으로 행 검색 시 유리.


 -LOB

LARGE OBJECT의 약자 

오라클에서 일반적인 DATA TYPE으로는 담을 수 없는 대량의 데이터를 저장하기 위해 고안된 타입 .


복합 변수-레토드 타입

복합 변수(조합변수)-레코드 타입,테이블 타입 

변수 하나 안에 사용자가 원하는 여러 가지 다른 유형의 데이터를 포함해서 사용자가 원하는 새로운 형태로 만든 변수


레코드 변수란>?

프로그램 언어 의 구조체와 유사하다 .PL/SQLRECORD는 FIELD들의  집합을 하나의 논리적 단위로 처리 할수 있게 해주므로 테이블의 ROW를 읽어올 때 편리하다 

형식:

TYPE TYPE_NAME IS RECORD

(FIELD_NAME1{SALAR_DATATYPE/RECORD_TYPE},....);

IDENTIFIER_NAME TYPE_NAME;

STRING이름 CHAR[10]이름?

TYPE_NAME은 구조체의 이름이고,IDENTIFIER_NAME은 구조체를 이용해 구체화 시킨것이다 .자바로 치면 일종의 객체 



복합 변수-테이블 타입


TABLE TYPE 변수란?

PL/SQL TABLE TYPE은 로우에 대해 배열처럼 액서스하기위해 기본키를 사용한다 배열과 유사하고 PL/SQL테이블을 엑세스 하기위해 BINARY_INTEGER데이터형의 기본키와 PL/SQL 테이블 요소를 저장하는 스칼라 또는 레코드 데이터형의 칼럼을 포함해야한다. 또한 이들 은 동적으로 자유롭게 증가할 수 있다.



조거문 -IF

IF~END IF

<형태>

IF 조건 THEN

실행문장;

END IF;

/


(예제는 나중에 업데이트 하겠습니다)


IF~ THEN~ELSIF~END IF 

<형태>

IF 조건 THEN

실행문장;


ELSEIF 조건 

THEN

실행문장;


ELSEIF 조건 

THEN

실행문장;


END IF;

/



(예제는 나중에 업데이트 하겠습니다)


<형태>

IF 조건 THEN

실행문장;


ELSE

실행문장;


END IF;

/


(예제는 나중에 업데이트 하겠습니다)