"피엘에스큐엘"의 두 판 사이의 차이
3번째 줄: | 3번째 줄: | ||
== 개요 == | == 개요 == | ||
− | PL/SQL (Oracle's Procedural Language extension to SQL) 은 | + | '''PL/SQL''' (Oracle's Procedural Language extension to SQL) 은 [[SQL]]의 확장된 개념으로 [[ORACLE]]에서 지원하는 프로그래밍 언어의 특성을 수용한 [[SQL]]의 확장이며, PL/SQL Block내에서 [[SQL]]의 [[DML]](데이터 조작어)문과 [[Query]](검색어)문, 절차형 언어(if,loop)등을 사용하여 다양한 저장 모듈을 개발할수있고 절차적 프로그래밍을 가능하게 한 강력한 트랜잭션 언어이다. |
+ | |||
+ | == 등장배경 == | ||
+ | |||
+ | == 역사 == | ||
+ | |||
+ | == 특징 == | ||
== 장점 == | == 장점 == | ||
9번째 줄: | 15번째 줄: | ||
* PL/SQL은 Block 구조로 되어있어 각 기능별로 모듈화가 가능하다. | * PL/SQL은 Block 구조로 되어있어 각 기능별로 모듈화가 가능하다. | ||
− | * 테이블의 데이터 구조와 데이터베이스(DataBase)의 컬럼에 준하여 동적으로 변수를 선언 할 수 있다. | + | * 테이블의 데이터 구조와 [[데이터베이스]](DataBase)의 컬럼에 준하여 동적으로 변수를 선언 할 수 있다. |
* IF,LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하다. | * IF,LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하다. | ||
15번째 줄: | 21번째 줄: | ||
* Exception 처리 루틴을 이용하여 Oracle Server Error를 처리 할 수 있다. | * Exception 처리 루틴을 이용하여 Oracle Server Error를 처리 할 수 있다. | ||
− | * PL/SQL은 Block 구조로 다수의 | + | * PL/SQL은 Block 구조로 다수의 [[SQL]]문을 한번에 [[Oracle]] DB로 보내서 처리하므로 통신량을 감소시켜 수행 속도를 향상 시킬수 있다. |
− | * PL/SQL은 | + | * PL/SQL은 [[Oracle]]에 내장되어 있으므로 [[Oracle]]과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다. |
== 단점 == | == 단점 == | ||
− | * 기본 | + | * 기본 [[SQL]]로도 얼마든지 처리 가능함에도 불구하고 PL/SQL로 처리하는 경우 [[SQL]]엔진과 PL/SQl엔진 사이를 전환하면서 처리하는 컨텍스트 스위칭(Context switching)이 발생하며 이것이 반복될 경우 성능이 떨어진다. |
− | * | + | * [[오라클]](Oracle)은 쿼리의 수행 시작 시점을 기준으로 데이터를 보여주는데 SQL에서 PL/SQL을 사용하고 해당 PL/SQL내에서 또 다른 테이블을 조회 하는 경우 '쿼리의 수행이 시작된 시점'이 SQL과 PL/SQL간에 서로 다르게 적용되어 장시간 수행되면서 테이블에 변경이 일어날 경우 데이터 일관성이 깨지는 문제가 발생할 수 있다. |
* PL/SQL내에서 DB LINK 사용시 서비스 품질이 떨어지거나 네트워크 지연이 상당한 경우가 많다. | * PL/SQL내에서 DB LINK 사용시 서비스 품질이 떨어지거나 네트워크 지연이 상당한 경우가 많다. | ||
− | * 무분별하게 트리거(Trigger)를 사용할 경우 트리거(Trigger)에 의해 변경되는 데이터를 추적하기가 쉽지 않아 유지•보수가 힘들다. 또한 | + | * 무분별하게 [[트리거]](Trigger)를 사용할 경우 트리거(Trigger)에 의해 변경되는 데이터를 추적하기가 쉽지 않아 유지•보수가 힘들다. 또한 [[DBA]]가 테이블에 대해 작업을 할 경우에도 문제를 일으켜 장애의 원인이 되기도 한다. |
== 활용 == | == 활용 == | ||
− | 주로 자료 내부에서 SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나 | + | 주로 자료 내부에서 [[SQL]] 명령문만으로 처리하기에는 복잡한 자료의 저장이나 [[프로시저]]와 [[트리거]] 등을 작성하는데 쓰인다. PL/SQL의 구조는 에이다 프로그래밍 언어를 본떠 만들어졌다고 알려졌다. 따라서 두 언어는 그 구조가 범용 언어인 [[파스칼]]의 구문과 비슷하다. 범용 언어인 [[C]]와 [[C++]] 그리고 [[파스칼]] 및 [[포트란]] 등의 프로그래밍 언어와는 다른 점으로 범용 언어들이 컴퓨터 시스템에서 특정한 작업을 처리 하기 위해 만들어진 언어라고 볼 때 PL/SQL은 단지 [[오라클]](Oracle)의 관계형 [[데이터베이스]](RDBMS)에서만 사용된다. |
== 종류 == | == 종류 == | ||
− | * 익명블럭 (anonymous PL/SQL block) : 이름이 없는 PL/SQL Block으로 DB에 이름을 가지고 저장되지 않는 형식이다. | + | * '''익명블럭''' (anonymous PL/SQL block) : 이름이 없는 PL/SQL Block으로 DB에 이름을 가지고 저장되지 않는 형식이다. |
+ | |||
+ | * [['''프로시저''']] (Procedure) : 리턴 값을 하나 이상 가질 수 있는 프로그램을 말한다. | ||
− | * | + | * '''함수''' (Function) : 리턴 값을 반드시 반환해야 하는 프로그램을 말한다. |
− | * | + | * [['''트리거''']] (Trigger) : 지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL 블록이다. |
− | * | + | * [['''패키지''']] (Package) : 하나 이상의 [[프로시저]], 함수, 변수, 예외 등의 묶음을 말한다. |
− | + | == 전망 == | |
− | |||
== 같이 보기 == | == 같이 보기 == | ||
* [[오라클 (제품)]] | * [[오라클 (제품)]] |
2019년 7월 1일 (월) 17:05 판
피엘에스큐엘(PL/SQL)은 오라클(Oracle) 데이터베이스에서 에스큐엘(SQL) 언어를 확장하기 위해 사용하는 프로그래밍 언어이다. SQL 명령문으로는 처리하기 어려운 복잡한 자료의 저장이나 프로시저(Procedure)와 트리거(Trigger) 등을 작성할 때 사용한다.
개요
PL/SQL (Oracle's Procedural Language extension to SQL) 은 SQL의 확장된 개념으로 ORACLE에서 지원하는 프로그래밍 언어의 특성을 수용한 SQL의 확장이며, PL/SQL Block내에서 SQL의 DML(데이터 조작어)문과 Query(검색어)문, 절차형 언어(if,loop)등을 사용하여 다양한 저장 모듈을 개발할수있고 절차적 프로그래밍을 가능하게 한 강력한 트랜잭션 언어이다.
등장배경
역사
특징
장점
- PL/SQL은 Block 구조로 되어있어 각 기능별로 모듈화가 가능하다.
- 테이블의 데이터 구조와 데이터베이스(DataBase)의 컬럼에 준하여 동적으로 변수를 선언 할 수 있다.
- IF,LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하다.
- Exception 처리 루틴을 이용하여 Oracle Server Error를 처리 할 수 있다.
단점
- 기본 SQL로도 얼마든지 처리 가능함에도 불구하고 PL/SQL로 처리하는 경우 SQL엔진과 PL/SQl엔진 사이를 전환하면서 처리하는 컨텍스트 스위칭(Context switching)이 발생하며 이것이 반복될 경우 성능이 떨어진다.
- 오라클(Oracle)은 쿼리의 수행 시작 시점을 기준으로 데이터를 보여주는데 SQL에서 PL/SQL을 사용하고 해당 PL/SQL내에서 또 다른 테이블을 조회 하는 경우 '쿼리의 수행이 시작된 시점'이 SQL과 PL/SQL간에 서로 다르게 적용되어 장시간 수행되면서 테이블에 변경이 일어날 경우 데이터 일관성이 깨지는 문제가 발생할 수 있다.
- PL/SQL내에서 DB LINK 사용시 서비스 품질이 떨어지거나 네트워크 지연이 상당한 경우가 많다.
- 무분별하게 트리거(Trigger)를 사용할 경우 트리거(Trigger)에 의해 변경되는 데이터를 추적하기가 쉽지 않아 유지•보수가 힘들다. 또한 DBA가 테이블에 대해 작업을 할 경우에도 문제를 일으켜 장애의 원인이 되기도 한다.
활용
주로 자료 내부에서 SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나 프로시저와 트리거 등을 작성하는데 쓰인다. PL/SQL의 구조는 에이다 프로그래밍 언어를 본떠 만들어졌다고 알려졌다. 따라서 두 언어는 그 구조가 범용 언어인 파스칼의 구문과 비슷하다. 범용 언어인 C와 C++ 그리고 파스칼 및 포트란 등의 프로그래밍 언어와는 다른 점으로 범용 언어들이 컴퓨터 시스템에서 특정한 작업을 처리 하기 위해 만들어진 언어라고 볼 때 PL/SQL은 단지 오라클(Oracle)의 관계형 데이터베이스(RDBMS)에서만 사용된다.
종류
- 익명블럭 (anonymous PL/SQL block) : 이름이 없는 PL/SQL Block으로 DB에 이름을 가지고 저장되지 않는 형식이다.
- '''프로시저''' (Procedure) : 리턴 값을 하나 이상 가질 수 있는 프로그램을 말한다.
- 함수 (Function) : 리턴 값을 반드시 반환해야 하는 프로그램을 말한다.
- '''트리거''' (Trigger) : 지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL 블록이다.
전망
같이 보기