더북(TheBook)

③ 바인드 변수 연결

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에 대한 인덱스 최댓값

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.