PL/SQL은 가장 효율적인 데이터 조작어이다.
/* 간단한 PL/SQL 루틴 */
CREATE OR REPLACE PROCEDURE process_data(p_inputs IN VARCHAR2)
AS
BEGIN
FOR x IN (SELECT * FROM emp WHERE ename LIKE p_inputs)
LOOP
Process(X);
END LOOP;
END;
- PL/SQL 데이터 유형이 SQL 데이터 유형이다.
- 프로그래밍 언어 유형과 데이터베이스 유형은 동일하기 때문에 따로 변환이 필요 없다.
SQL과 PL/SQL은 쉽게 혼합될 수 있다.
- FOR x IN (SELECT ...) 이 구문에서 컴파일러는 x 를 정의하는 방법을 알고 있으며
- 묵시적으로 레코드의 유형을 생성하고, 쿼리로부터 데이터를 입수하여
- 암묵적으로 정의된 레코드에 넣기 위한 일련의 작업을 알아서 한다.
비교 | PL/SQL | Java |
데이터베이스 자료유형 | 일치 | 불일치 |
레코드 유형 및 변수 정의 | 자동 | 수동 |
쿼리의 Open 과 Close | 자동 | 수동 |
데이터베이스 변경 | 자유롭다 | 자유롭지 못함 |
PL/SQL은 이식 및 재사용이 가능하다.
- Java 나 C 언어는 이식성과 재사용성이 뛰어나지만 자바는 자바, C는 C에서만 재사용된다.
- 기타 다른 언어에서 서로를 호출할 수는 있으나 이는 자연스럽지 못하다.
- 반면 PL/SQL은 데이터베이스에 연결된 프로그램이라면 어떤 언어에서도 호출이 가능하다.
- PL/SQL도 언어이기 때문에 프로그래머의 역량에 따라 최악의 코딩을 할 수도 있다.
- 그러나 다른 언어에서 생길 수있는 오류가 PL/SQL에서는 나타나기 어렵다.
- 바인드 변수의 사용 : 정적 SQL에서 바인드 변수 사용이 쉽다.
- 한번의 파스와 여러번의 실행 : 정적 SQL을 사용하면 과도한 파싱과정이 없다.
- SELECT * : 테이블의 변화에 적응한다. 열 추가, 삭제 및 순서 변경시 다른 응용프로그램은 동작하지 않는다.
- 스키마 변경 : 컬럼 크기 조정시에 잘 작성된 PL/SQL은 영향을 받지 않지만 다른 응용프로그램은 이 환경을 수용하도록 수정되어야만 한다. (%TYPE, %ROWTYPE 은 PL/SQL만의 장점이다)