③ 바인드 변수 연결
NDS와 마찬가지로 SQL문장과 바인드 변수를 연결할 수 있다. 바인드 변수가 없다면 이 단계는 건너 뛰어도 된다. 바인드 변수를 연결하는 방법은 BIND_VARIABLE 프로시저와 BIND_ARRAY 프로시저를 호출하는 방법이 있는데, 주로 BIND_VARIABLE 프로시저를 사용한다.
DBMS_SQL.BIND_VARIABLE (
c IN INTEGER,
name IN VARCHAR2,
value IN <datatype>);
• c: 파싱할 문장에 대한 커서 ID로 OPEN_CUSRSOR 함수 반환 값이 온다.
• name: SQL문장에서 사용된 바인드 변수명으로, SQL 문장이 “ SELECT * FROM tab1 WHERE col1 = :a” 라고 한다면 name 매개변수 값은 ‘:a’ 형태로 명시한다.
• value: name 매개변수에서 명시한 바인드 변수에 할당할 실제 값을 명시하며 다양한 타입이 올 수 있다.
BIND_VARIABLE 프로시저는 EXECUTE IMMEDIATE 문에서 USING 다음에 기술하는 바인드 변수 역할을 하며, SQL문장에 기술한 바인드 변수 개수만큼 BIND_VARIABLE 프로시저를 호출해야 한다.
BIND_ARRAY 프로시저는 바인드 변수 자체를 배열 형태로 만들어 연결한다. 주로 INSERT, UPDATE 문을 처리할 때 사용되며 그 상세내역은 다음과 같다.
DBMS_SQL.BIND_ARRAY (
c IN INTEGER,
name IN VARCHAR2,
<table_variable> IN <datatype>
[,index1 IN INTEGER,
index2 IN INTEGER)] );
• c: 파싱할 문장에 대한 커서 ID로 OPEN_CUSRSOR 함수 반환 값이 온다.
• name: SQL문장에서 사용된 바인드 변수명으로, “ INSERT INTO tab1 ( col1 ) VALUES ( :a )” 라고 한다면 name 매개변수 값은 ‘:a’ 형태로 명시한다.
• t able_variable: DBMS_SQL 패키지 내에 선언된 컬렉션 타입인 연관 배열 변수를 명시한다. 이러한 연관 배열에는 VARCHAR2_TABLE, NUMBER_TABLE, DATE_TABLE 등의 타입이 있다.
• index1: 컬렉션 타입인 table_variable에 대한 인덱스 최솟값
• index2: 컬렉션 타입인 table_variable에 대한 인덱스 최댓값