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/SQLJava
데이터베이스 자료유형일치불일치
레코드 유형 및 변수 정의자동수동
쿼리의 Open 과 Close자동수동
데이터베이스 변경자유롭다자유롭지 못함


PL/SQL은 이식 및 재사용이 가능하다.

  • Java 나 C 언어는 이식성과 재사용성이 뛰어나지만 자바는 자바, C는 C에서만 재사용된다.
  • 기타 다른 언어에서 서로를 호출할 수는 있으나 이는 자연스럽지 못하다.
  • 반면 PL/SQL은 데이터베이스에 연결된 프로그램이라면 어떤 언어에서도 호출이 가능하다.
  • PL/SQL도 언어이기 때문에 프로그래머의 역량에 따라 최악의 코딩을 할 수도 있다.
  • 그러나 다른 언어에서 생길 수있는 오류가 PL/SQL에서는 나타나기 어렵다.
    • 바인드 변수의 사용 : 정적 SQL에서 바인드 변수 사용이 쉽다.
    • 한번의 파스와 여러번의 실행 : 정적 SQL을 사용하면 과도한 파싱과정이 없다.
    • SELECT * : 테이블의 변화에 적응한다. 열 추가, 삭제 및 순서 변경시 다른 응용프로그램은 동작하지 않는다.
    • 스키마 변경 : 컬럼 크기 조정시에 잘 작성된 PL/SQL은 영향을 받지 않지만 다른 응용프로그램은 이 환경을 수용하도록 수정되어야만 한다. (%TYPE, %ROWTYPE 은 PL/SQL만의 장점이다)