검수요청.png검수요청.png

"피엘에스큐엘"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글
 
(사용자 3명의 중간 판 17개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''피엘에스큐엘'''(PL/SQL)은 [[오라클 (제품)|오라클]](Oracle) 데이터베이스에서 [[에스큐엘]](SQL) 언어를 확장하기 위해 사용하는 [[프로그래밍 언어]]이다. SQL 명령문으로는 처리하기 어려운 복잡한 자료의 저장이나 [[프로시저]](Procedure)와 [[트리거]](Trigger) 등을 작성할 때 사용한다.
+
[[파일:피엘에스큐엘 로고.png|썸네일|200픽셀|'''피엘에스큐엘'''(PL/SQL)]]
 +
[[파일:피엘에스큐엘 글자.png|썸네일|300픽셀|'''피엘에스큐엘'''(PL/SQL)]]
 +
 
 +
'''피엘에스큐엘'''(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)등을 사용하여 다양한 저장 모듈을 개발할수있고 절차적 프로그래밍을 가능하게 한 강력한 트랜잭션 언어이다.<ref name="피엘에스큐엘 백서">"[https://m.blog.naver.com/kmymk/110081331981 PL/SQL이란?]", 《네이버 블로그》</ref>
+
'''PL/SQL''' (Oracle's Procedural Language extension to SQL) 은 [[SQL]]의 확장된 개념으로 [[오라클]]에서 지원하는 프로그래밍 언어의 특성을 수용한 [[SQL]]의 확장이며, PL/SQL Block내에서 [[SQL]]의 DML(데이터 조작어)문과 Query(검색어)문, 절차형 언어(if,loop)등을 사용하여 다양한 저장 모듈을 개발할수있고 절차적 프로그래밍을 가능하게 한 강력한 트랜잭션 언어이다.<ref name="피엘에스큐엘 백서">"[https://m.blog.naver.com/kmymk/110081331981 PL/SQL이란?]", 《네이버 블로그》</ref>
 
 
== 특징 ==
 
 
 
* 블록 단위의 실행을 제공한다. 이를 위해 BEGIN과 END;를 사용한다. 그리고 마지막 라인에 /를 입력하면 해당 블록이 실행된다.
 
* IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하다.
 
* 변수의 선언은 DECLARE절에서만 가능하다. 그리고 BEGIN섹션에서 새 값이 할당될 수 있다.
 
* PL/SQL에서 사용 가능한 SQL은 [[쿼리]]Query, [[DML]](Data Manipulation Language), [[TCL]](Transaction Control language)이다. [[DDL]](Data Definition Language),[[DCL]](Data Control Language)명령어는 동적 [[SQL]]을 이용할 때만 사용 가능하다.<ref>갓대희, 〈[https://goddaehee.tistory.com/99 PL/SQL의 기초(정의 특징,사용방법,변수선언 방법)]〉, 《개인블로그》 , 2018-05-24</ref>
 
  
 
== 역사 ==
 
== 역사 ==
1988년 7월에 소개된 [[오라클]](Oracle) 버전6은 대용량 OLTP환경의 요구사항에 맞도록 개발되었다.이때 강조된 사항은 [[OLTP]]에 중대한 영향을 미치는 [[I/O]],버퍼 관리, 동시성 제어, 백업 및 복구 등으로서 [[I/O]]시간을 줄여주기 위해 빠른 커밋(Fast Commit), 지연쓰기(Deffered Write)등이 소개되었으며, 시스템 가용성의 개선을 위해 온라인 백업 및 복구기능이 발표되었다.[[오라클]] 병렬 서버를 버전 6.2에 공식적으로 발표하였고, 버전6의 사용자들은 최초로 [[SQL]]문을 절차언어인 PL/SQL문과 함께 사용할 수 있게 되었다.<ref>김정식, 〈[https://http://www.gurubee.net/lecture/1302 지금의 오라클이라는 데이터베이스가 나오기 까지의 과정.]〉, 《개인블로그》 , 2002-04-23</ref>
+
1988년 7월에 소개된 [[오라클]](Oracle) 버전6은 대용량 [[OLTP]]환경의 요구사항에 맞도록 개발되었다.이때 강조된 사항은 [[OLTP]]에 중대한 영향을 미치는 [[I/O]],버퍼 관리, 동시성 제어, 백업 및 복구 등으로서 [[I/O]]시간을 줄여주기 위해 빠른 커밋(Fast Commit), 지연쓰기(Deffered Write)등이 소개되었으며, 시스템 가용성의 개선을 위해 온라인 백업 및 복구기능이 발표되었다.[[오라클]] 병렬 서버를 버전 6.2에 공식적으로 발표하였고, 버전6의 사용자들은 최초로 [[SQL]]문을 절차언어인 PL/SQL문과 함께 사용할 수 있게 되었다.<ref>김정식, 〈[https://http://www.gurubee.net/lecture/1302 지금의 오라클이라는 데이터베이스가 나오기 까지의 과정.]〉, 《개인블로그》 , 2002-04-23</ref>
  
 
== 장점 ==
 
== 장점 ==
19번째 줄: 15번째 줄:
 
* IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하다.
 
* IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하다.
 
* Exception 처리 루틴을 이용하여 Oracle Server Error를 처리할 수 있다.
 
* Exception 처리 루틴을 이용하여 Oracle Server Error를 처리할 수 있다.
* PL/SQL은 Block 구조로 다수의 [[SQL]]문을 한번에 [[Oracle]] DB로 보내서 처리하므로 통신량을 감소시켜 수행 속도를 향상시킬 수 있다.
+
* PL/SQL은 Block 구조로 다수의 [[SQL]]문을 한번에 Oracle DB로 보내서 처리하므로 통신량을 감소시켜 수행 속도를 향상시킬 수 있다.
* PL/SQL은 [[오라클 (제품)|오라클]]에 내장되어 있으므로 오라클과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.<ref name="피엘에스큐엘 백서"></ref>
+
* PL/SQL은 [[오라클 (데이터베이스)|오라클]]에 내장되어 있으므로 오라클과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.<ref name="피엘에스큐엘 백서"></ref>
  
 
== 단점 ==
 
== 단점 ==
 
* 기본 [[SQL]]로도 얼마든지 처리 가능함에도 불구하고 PL/SQL로 처리하는 경우 [[SQL]] 엔진과 PL/SQl 엔진 사이를 전환하면서 처리하는 컨텍스트 스위칭(context switching)이 발생하며 이것이 반복될 경우 성능이 떨어진다.
 
* 기본 [[SQL]]로도 얼마든지 처리 가능함에도 불구하고 PL/SQL로 처리하는 경우 [[SQL]] 엔진과 PL/SQl 엔진 사이를 전환하면서 처리하는 컨텍스트 스위칭(context switching)이 발생하며 이것이 반복될 경우 성능이 떨어진다.
* [[오라클]](Oracle)은 쿼리의 수행 시작 시점을 기준으로 데이터를 보여주는데 SQL에서 PL/SQL을 사용하고 해당 PL/SQL내에서 또 다른 테이블을 조회 하는 경우 '[[쿼리]]의 수행이 시작된 시점'이 SQL과 PL/SQL간에 서로 다르게 적용되어 장시간 수행되면서 테이블에 변경이 일어날 경우 데이터 일관성이 깨지는 문제가 발생할 수 있다.
+
* [[오라클]](Oracle)은 쿼리의 수행 시작 시점을 기준으로 데이터를 보여주는데 [[SQL]]에서 PL/SQL을 사용하고 해당 PL/SQL내에서 또 다른 테이블을 조회 하는 경우 '[[쿼리]]의 수행이 시작된 시점'이 [[SQL]]과 PL/SQL간에 서로 다르게 적용되어 장시간 수행되면서 테이블에 변경이 일어날 경우 데이터 일관성이 깨지는 문제가 발생할 수 있다.
 
* PL/SQL 내에서 DB LINK 사용시 서비스 품질이 떨어지거나 네트워크 지연이 상당한 경우가 많다.
 
* PL/SQL 내에서 DB LINK 사용시 서비스 품질이 떨어지거나 네트워크 지연이 상당한 경우가 많다.
* 무분별하게 [[트리거]](Trigger)를 사용할 경우 트리거(Trigger)에 의해 변경되는 데이터를 추적하기가 쉽지 않아 유지·보수가 힘들다. 또한 [[DBA]]가 테이블에 대해 작업을 할 경우에도 문제를 일으켜 장애의 원인이 되기도 한다.<ref name="피엘에스큐엘 백서"></ref>
+
* 무분별하게 [[트리거]](Trigger)를 사용할 경우 [[트리거]](Trigger)에 의해 변경되는 데이터를 추적하기가 쉽지 않아 유지·보수가 힘들다. 또한 [[DBA]]가 테이블에 대해 작업을 할 경우에도 문제를 일으켜 장애의 원인이 되기도 한다.<ref>현명발전소, 〈[http://blog.naver.com/PostView.nhn?blogId=gwise&logNo=220870689217&parentCategoryNo=34&categoryNo=&viewDate=&isShowPopularPosts=true&from=search PL/SQL을 사용하는 이유?]〉, 《개인블로그》 , 2016-07-07</ref>
 
 
  
 
== 활용 ==
 
== 활용 ==
주로 자료 내부에서 [[SQL]] 명령문만으로 처리하기에는 복잡한 자료의 저장이나 [[프로시저]]와 [[트리거]] 등을 작성하는데 쓰인다. PL/SQL의 구조는 에이다 프로그래밍 언어를 본떠 만들어졌다고 알려졌다. 따라서 두 언어는 그 구조가 범용 언어인 [[파스칼]]의 구문과 비슷하다. 범용 언어인 [[C]]와 [[C++]] 그리고 [[파스칼]] 및 [[포트란]] 등의 프로그래밍 언어와는 다른 점으로 범용 언어들이 컴퓨터 시스템에서 특정한 작업을 처리 하기 위해 만들어진 언어라고 볼 때 PL/SQL은 단지 [[오라클]](Oracle)의 관계형 [[데이터베이스]](RDBMS)에서만 사용된다.<ref>위키백과, 〈[https://ko.wikipedia.org/wiki/PL/SQL PL/SQL]〉, 《위키백과》 , 2010-04</ref>
+
주로 자료 내부에서 [[SQL]] 명령문만으로 처리하기에는 복잡한 자료의 저장이나 [[프로시저]]와 [[트리거]] 등을 작성하는데 쓰인다. PL/SQL의 구조는 에이다 프로그래밍 언어를 본떠 만들어졌다고 알려졌다. 따라서 두 언어는 그 구조가 범용 언어인 [[파스칼]]의 구문과 비슷하다. 범용 언어인 [[C]]와 [[C++]] 그리고 [[파스칼]] 및 [[포트란]] 등의 프로그래밍 언어와는 다른 점으로 범용 언어들이 컴퓨터 시스템에서 특정한 작업을 처리 하기 위해 만들어진 언어라고 볼 때 PL/SQL은 단지 [[오라클]](Oracle)의 관계형 데이터베이스(RDBMS)에서만 사용된다.<ref>위키백과, 〈[https://ko.wikipedia.org/wiki/PL/SQL PL/SQL]〉, 《위키백과》 , 2010-04</ref>
  
 
== 종류 ==
 
== 종류 ==
* '''익명블럭''' (anonymous PL/SQL block) : 이름이 없는 PL/SQL Block으로 DB에 저장되지 않고, 사용자가 실행하려는 SQL문을 필요로 할때마다 반복적으로 작성하여 실행하는 방법이다.
+
* '''익명블럭''' (anonymous PL/SQL block) : 이름이 없는 PL/SQL Block으로 [[데이터베이스]](DB)에 저장되지 않고, 사용자가 실행하려는 [[SQL]]문을 필요로 할때마다 반복적으로 작성하여 실행하는 방법이다.
 
* '''[[프로시저]]''' (Procedure) : 리턴 값을 하나 이상 가질 수 있는 프로그램을 말한다.
 
* '''[[프로시저]]''' (Procedure) : 리턴 값을 하나 이상 가질 수 있는 프로그램을 말한다.
 
* '''함수''' (Function) : 리턴 값을 반드시 반환해야 하는 프로그램을 말한다. 일반적으로 값을 계산하기 위해 사용된다.
 
* '''함수''' (Function) : 리턴 값을 반드시 반환해야 하는 프로그램을 말한다. 일반적으로 값을 계산하기 위해 사용된다.
 
* '''[[트리거]]''' (Trigger) : 지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL 블록이다.
 
* '''[[트리거]]''' (Trigger) : 지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL 블록이다.
* '''[[패키지]]''' (Package) : 하나 이상의 [[프로시저]], 함수, 변수, 예외 등의 묶음을 말한다.<ref>현명발전소, 〈[http://blog.naver.com/PostView.nhn?blogId=gwise&logNo=220870689217&parentCategoryNo=34&categoryNo=&viewDate=&isShowPopularPosts=true&from=search PL/SQL을 사용하는 이유?]〉, 《개인블로그》 , 2016-07-07</ref>
+
* '''[[패키지]]''' (Package) : 하나 이상의 [[프로시저]], 함수, 변수, 예외 등의 묶음을 말한다.<ref>Liam Han, 〈[https://nrhan.tistory.com/entry/PLSQL-%EA%B0%9C%EA%B4%80-1-%EC%A0%95%EC%9D%98-%ED%8A%B9%EC%A7%95-%EC%9E%A5%EC%A0%90 PL/SQL 개관 -1 (정의,특징,장점,Block의 종류)]〉, 《네이버 블로그》 , 2016-07-07</ref>
  
 
{{각주}}
 
{{각주}}
43번째 줄: 38번째 줄:
 
== 참고자료 ==
 
== 참고자료 ==
 
* Dr금, 〈[https://m.blog.naver.com/kmymk/110081331981 PL/SQL이란?]〉, 《네이버 블로그》 , 2010-02-23
 
* Dr금, 〈[https://m.blog.naver.com/kmymk/110081331981 PL/SQL이란?]〉, 《네이버 블로그》 , 2010-02-23
* 갓대희, 〈[https://goddaehee.tistory.com/99 PL/SQL의 기초(정의 특징,사용방법,변수선언 방법)]〉, 《개인블로그》 , 2018-05-24
 
 
* 김정식, 〈[https://http://www.gurubee.net/lecture/1302 지금의 오라클이라는 데이터베이스가 나오기 까지의 과정.]〉, 《개인 블로그》 , 2002-04-23
 
* 김정식, 〈[https://http://www.gurubee.net/lecture/1302 지금의 오라클이라는 데이터베이스가 나오기 까지의 과정.]〉, 《개인 블로그》 , 2002-04-23
 
* Liam Han, 〈[https://nrhan.tistory.com/entry/PLSQL-%EA%B0%9C%EA%B4%80-1-%EC%A0%95%EC%9D%98-%ED%8A%B9%EC%A7%95-%EC%9E%A5%EC%A0%90 PL/SQL 개관 -1 (정의,특징,장점,Block의 종류)]〉, 《네이버 블로그》 , 2016-07-07
 
* Liam Han, 〈[https://nrhan.tistory.com/entry/PLSQL-%EA%B0%9C%EA%B4%80-1-%EC%A0%95%EC%9D%98-%ED%8A%B9%EC%A7%95-%EC%9E%A5%EC%A0%90 PL/SQL 개관 -1 (정의,특징,장점,Block의 종류)]〉, 《네이버 블로그》 , 2016-07-07
50번째 줄: 44번째 줄:
  
 
== 같이 보기 ==
 
== 같이 보기 ==
* [[오라클 (제품)]]
+
* [[오라클 (데이터베이스)|오라클]]
 
* [[에스큐엘]](SQL)
 
* [[에스큐엘]](SQL)
 
* [[프로시저]]
 
* [[프로시저]]

2021년 8월 10일 (화) 10:27 기준 최신판

피엘에스큐엘(PL/SQL)
피엘에스큐엘(PL/SQL)

피엘에스큐엘(PL/SQL)은 오라클(Oracle) 데이터베이스에서 에스큐엘(SQL) 언어를 확장하기 위해 사용하는 프로그래밍 언어이다. SQL 명령문으로는 처리하기 어려운 복잡한 자료의 저장이나 프로시저(Procedure)와 트리거(Trigger) 등을 작성할 때 사용한다.

개요[편집]

PL/SQL (Oracle's Procedural Language extension to SQL) 은 SQL의 확장된 개념으로 오라클에서 지원하는 프로그래밍 언어의 특성을 수용한 SQL의 확장이며, PL/SQL Block내에서 SQL의 DML(데이터 조작어)문과 Query(검색어)문, 절차형 언어(if,loop)등을 사용하여 다양한 저장 모듈을 개발할수있고 절차적 프로그래밍을 가능하게 한 강력한 트랜잭션 언어이다.[1]

역사[편집]

1988년 7월에 소개된 오라클(Oracle) 버전6은 대용량 OLTP환경의 요구사항에 맞도록 개발되었다.이때 강조된 사항은 OLTP에 중대한 영향을 미치는 I/O,버퍼 관리, 동시성 제어, 백업 및 복구 등으로서 I/O시간을 줄여주기 위해 빠른 커밋(Fast Commit), 지연쓰기(Deffered Write)등이 소개되었으며, 시스템 가용성의 개선을 위해 온라인 백업 및 복구기능이 발표되었다.오라클 병렬 서버를 버전 6.2에 공식적으로 발표하였고, 버전6의 사용자들은 최초로 SQL문을 절차언어인 PL/SQL문과 함께 사용할 수 있게 되었다.[2]

장점[편집]

  • PL/SQL은 블록(block) 구조로 되어 있어 각 기능별로 모듈화가 가능하다.
  • 테이블의 데이터 구조와 데이터베이스(DataBase)의 컬럼에 준하여 동적으로 변수를 선언할 수 있다.
  • IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그램이 가능하다.
  • Exception 처리 루틴을 이용하여 Oracle Server Error를 처리할 수 있다.
  • PL/SQL은 Block 구조로 다수의 SQL문을 한번에 Oracle DB로 보내서 처리하므로 통신량을 감소시켜 수행 속도를 향상시킬 수 있다.
  • PL/SQL은 오라클에 내장되어 있으므로 오라클과 PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다.[1]

단점[편집]

  • 기본 SQL로도 얼마든지 처리 가능함에도 불구하고 PL/SQL로 처리하는 경우 SQL 엔진과 PL/SQl 엔진 사이를 전환하면서 처리하는 컨텍스트 스위칭(context switching)이 발생하며 이것이 반복될 경우 성능이 떨어진다.
  • 오라클(Oracle)은 쿼리의 수행 시작 시점을 기준으로 데이터를 보여주는데 SQL에서 PL/SQL을 사용하고 해당 PL/SQL내에서 또 다른 테이블을 조회 하는 경우 '쿼리의 수행이 시작된 시점'이 SQL과 PL/SQL간에 서로 다르게 적용되어 장시간 수행되면서 테이블에 변경이 일어날 경우 데이터 일관성이 깨지는 문제가 발생할 수 있다.
  • PL/SQL 내에서 DB LINK 사용시 서비스 품질이 떨어지거나 네트워크 지연이 상당한 경우가 많다.
  • 무분별하게 트리거(Trigger)를 사용할 경우 트리거(Trigger)에 의해 변경되는 데이터를 추적하기가 쉽지 않아 유지·보수가 힘들다. 또한 DBA가 테이블에 대해 작업을 할 경우에도 문제를 일으켜 장애의 원인이 되기도 한다.[3]

활용[편집]

주로 자료 내부에서 SQL 명령문만으로 처리하기에는 복잡한 자료의 저장이나 프로시저트리거 등을 작성하는데 쓰인다. PL/SQL의 구조는 에이다 프로그래밍 언어를 본떠 만들어졌다고 알려졌다. 따라서 두 언어는 그 구조가 범용 언어인 파스칼의 구문과 비슷하다. 범용 언어인 CC++ 그리고 파스칼포트란 등의 프로그래밍 언어와는 다른 점으로 범용 언어들이 컴퓨터 시스템에서 특정한 작업을 처리 하기 위해 만들어진 언어라고 볼 때 PL/SQL은 단지 오라클(Oracle)의 관계형 데이터베이스(RDBMS)에서만 사용된다.[4]

종류[편집]

  • 익명블럭 (anonymous PL/SQL block) : 이름이 없는 PL/SQL Block으로 데이터베이스(DB)에 저장되지 않고, 사용자가 실행하려는 SQL문을 필요로 할때마다 반복적으로 작성하여 실행하는 방법이다.
  • 프로시저 (Procedure) : 리턴 값을 하나 이상 가질 수 있는 프로그램을 말한다.
  • 함수 (Function) : 리턴 값을 반드시 반환해야 하는 프로그램을 말한다. 일반적으로 값을 계산하기 위해 사용된다.
  • 트리거 (Trigger) : 지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL 블록이다.
  • 패키지 (Package) : 하나 이상의 프로시저, 함수, 변수, 예외 등의 묶음을 말한다.[5]

각주[편집]

  1. 1.0 1.1 "PL/SQL이란?", 《네이버 블로그》
  2. 김정식, 〈지금의 오라클이라는 데이터베이스가 나오기 까지의 과정.〉, 《개인블로그》 , 2002-04-23
  3. 현명발전소, 〈PL/SQL을 사용하는 이유?〉, 《개인블로그》 , 2016-07-07
  4. 위키백과, 〈PL/SQL〉, 《위키백과》 , 2010-04
  5. Liam Han, 〈PL/SQL 개관 -1 (정의,특징,장점,Block의 종류)〉, 《네이버 블로그》 , 2016-07-07

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 피엘에스큐엘 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.