오라클 EXECUTE IMMEDIATE 바인딩 변수

오라클의 NDS(Native Dynamic SQL)은 엄청나게 강력한 기능중 하나다.

NDS가 성능이 낮아서 사용을 꺼리는 경우가 있는데, 9i에 들어와서 성능이 많이 개선되었다고 한다.

성능이 개선되지 않았을 때에도 프로그램 유지 보수성, 가독성등 여러가지 측면을 따져보았을 때 약간의 성능을 버리더라도 NDS를 사용하는것이 유리한 경우가 많았다.

NDS에 대한 자세한 정보는 다음 링크를 보거나 ORACLE에서 제공하는 메뉴얼을 읽기 바란다. 정말 잘 되어 있다.

http://www.oracle.com/technetwork/issue-archive/o64sql-095035.html


NDS는 다음으로 구성된다


EXECUTE IMMEDIATE sql_string
   [INTO variable_list ]
   [USING bind_variable_list ]

이 간결한 문법을 보라! 오라클이 강력한 이유중 하나는 문법이 간결해서인것 같다.

대부분의 리더를 위해서 예제부터 들어간다.

-------------------

동적 쿼리에서 파라미터 사용과 반환값 받기

EXECUTE IMMEDIATE 'SELECT COUNT(1) FROM STUDENTS WHERE FIRST_NAME = :1' INTO C USING 'Brian'

포인트는 반환값을 설정하기 위해서 select 문에 into 구문이 들어가지 않는다는 점이다.
여러 컬럼을 반환하고자 할 때에는 into 절에 여러 변수를 병렬로 지정한다.

그리고 where절을 보면 :1 바인드 변수를 사용하는데 1이라는 숫자는 가독성을 위한 것이지 의미가 있지는 않다. USING에 나열된 순서대로 바인드 변수에 차례대로 적용시킨다.