오라클에서 출력된 문자열을 into 절에서 Host 변수로 받을 때 VARCHAR[]형으로 받는 예
Host변수를 선언할 때 INTO 절에서 오라클로부터 문자열을 받을 경우, VARCHAR[]형을 사용하면 문자열 뒤에 NULL문자를 추가하기가 편리한 장점이 있다.
Pro C에서 호스트 변수를 VARCHAR[]형으로 선언하면 Pro C컴파일러에 의해 구조체로 변환되고 구조체의 멤버로 arr배열과 len정수 멤버가 있기 때문에 오라클에서 이 구조체에 문자열을 저장할 때는 arr배열에는 문자열을 저장하고, len멤버에는 저장한 문자열의 길이를 저장해주기 때문에 이를 이용하여 배열의 마지막 문자 뒤에 NULL문자를 추가하기가 쉽게 된다.
#include <stdio.h>
#include "sqlca.h"
int main(void) {
EXEC SQL BEGIN DECLARE SECTION;
char *connstr = "scott/ojtit@orcl";
int empno;
VARCHAR ename[20];
char hiredate[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT :connstr;
if(sqlca.sqlcode == 0) {
printf("오라클 연결 성공\n");
}else{
printf("오류 : 오라클 연결 실패\n");
}
EXEC SQL
SELECT
empno,ename,hiredate
INTO :empno, :ename, :hiredate
FROM
EMP
WHERE
ename = 'SMITH';
/* 문자열을 받기 위해서 VARCHAR[]을 into절에 사용한 경우에는 오라클이 arr배열에 저장한 문자열의
* 길이를 len멤버변수에 저장해주기 때문에 개발자가 배열의 마지막 문자뒤에 NULL문자를 추가하기가
* 편리하다*/
printf("strlen(ename.arr)=%d \n", ename.len ); /*저장된 길이=5 */
ename.arr[ename.len] = '\0';
printf("empno=%d, ename=%s, hiredate=%s \n", empno, ename.arr, hiredate);
EXEC SQL ROLLBACK WORK RELEASE;
printf("프로그램 종료\n");
return 0;
}