Pro*C
란
외부 C 프로그램과 결합할 수 있는 선행 컴파일러
Oracle RDBMS에서 제공하는 툴
목적
- C언어를 사용하여 데이터베이스를 쉽게 관리할 목적
- SQL문을 포함한 C프로그램
을 Oracle DB 내 데이터 접근 및 조작이 가능한 C 프로그램
으로 변환하기 위함
- PL/SQL 프로그램의 경우 오라클 외부 프로그램과의 연동에 많은 제약이 있다.
특징
- PreCompiler (선행 컴파일러)
- Pro*C
만으로는 실행 파일을 만들 수 없다.
- 입력 파일 내의 EXEC SQL문을 Oracle 콜로 변환해서 실행 파일이 아닌 C컴파일러가 인식할 수 있는 출력 파일(.c)을 생성한다.
- 해당 출력 파일은 C 프로그램의 통상적인 방식으로 컴파일, 오라클 라이브러리와 링크되어 실행 모듈이 만들어진다.
- PL/SQL과 같이 절차적 프로그래밍이 가능하다.
- PL/SQL: 오라클 내부에서 수행
- Pro*C
: 실행 가능한 외부 프로그램으로 작성됨
구성
어플리케이션 프롤로그
- 변수 정의
Pro*C
프로그램을 위한 일반적인 준비 수행
선언절
- 2.0 버전 이후 없어도 상관 없음.
- C 프로그램 내에서 사용되는 모든 호스트 변수와 표지 번수를 선언한다.
EXEC SQL BEGIN DECLARE SECTION;
...
EXEC SQL END DECLARE SECTION;
호스트 변수
- SQL과 프로그램 모두에서 참조되는 모든 값에 대해서 선언해야 한다.
- 호스트 변수의 데이터 타입은 테이블 컬럼의 데이터 타입과 일치할 필요는 없다.
- 선언절에서 명시적으로 선언 후 데이터 타입을 지정해야 한다.
- 대소문자를 구분한다.
- SQL 문에서는 변수 앞에 콜론
:
을 붙인다.
- C 문에서는 콜론을 붙이지 않는다.
- SQL의 예약어를 사용하지 않는다.
- 상수를 사용할 수 있는 곳에서난 사용한다.
- 표지 변수가 붙어 있어도 상관 없다.
EXEC SQL BEGIN DECLARE SECTION;
int p_emp_no;
char p_name[11];
int p_dept_no;
EXEC SQL END DECLARE SECTION;
EXEC SQL
SELECT dept_no, e_name
INTO :p_dept_no, :p_name
FROM employee
WHERE emplyee_no = :p_emp_no;
어플리케이션 본체
- 데이터를 조작하기 위한 SQL 문 포함 = 데이터 조작문
Pro*C
가 처리 시에 필요한 코드 전후에 어떠한 C 코드를 지정해도 상관 없다.
- 데이터 정의문은 테이블, 뷰, 인덱스 등 데이터 구조를 작성하거나 정의하기 위해 사용된다.
- 예시
- DECLARE STATEMENT
- DECLARE DATABASE
- EXEC ORACLE
출처