SQLExecDirect
SQLExecDirect#
만약 SQL 문에 매개변수가 존재한다면 매개변수 마커들의 현재 값을 사용하여 주어진 SQL 문장을 직접 실행한다. SQL 문은 한 번만 실행될 수 있으며 DB로 보내는 가장 빠른 방법이다.
Unicode SQLExecDirectW() 동작은 SQLExecDirect()와 동일하다.
구 문#
SQLRETURN SQLExecDirect (
SQLHSTMT stmt,
SQLCHAR * sql,
SQLINTEGER sqlLength );
인 자#
자료유형 | 인자 | 사용 | 설명 |
---|---|---|---|
SQLHSTMT | stmt | 입력 | 명령문 핸들 |
SQLCHAR * | sql | 입력 | 실행 될 SQL 문 |
SQLINTEGER | sqlLength | 입력 | *sql의 문자 개수 |
결괏값#
SQL_SUCCESS
SQL_SUCCESS_WITH_INFO
SQL_NO_DATA
SQL_INVALID_HANDLE
SQL_ERROR
설 명#
SQL문 스트링에는 매개변수 마커가 포함될 수 있다. 매개변수 마커는 "?" 문자로
표시되며, SQLExecDirect()가 호출될 때 애플리케이션 변수 값이 대체되어야 할
명령문의 위치를 지정한다. SQLBindParameter()는 애플리케이션 변수를 각 매개변수
마커에 바인드(연관)시켜서, 자료가 전송될 때 자료 변환이 수행되어야 하는지를
표시한다. 모든 매개변수는 SQLExecDirect()를 호출하기 전에 바인드되어야 한다.
SQL 문이 SELECT 문일 때, 서버로부터 받은 결과 집합에서 행을 검색하려면,
SQLExecDirect()가 성공적으로 리턴된 후 SQLBindCol() 에 의해 버퍼를 바인딩한 후,
SQLFetch()를 호출하여서, 바인딩 된 버퍼를 참조하면 된다.
만약 SQLExecDirect()가 DB에 어떠한 행에도 영향을 끼치지 않는 update 문 또는 delete 문을 실행하면 SQLExecDirect()에 대한 호출은 SQL_NO_DATA를 반환한다. (영향을 끼친 레코드 수를 파악하기 위해 SQLRowCount()를 사용할 수 있다.)
진 단#
SQLSTATE | 설명 | 부연설명 |
---|---|---|
08003 | stmt가 연결 되지 않은 상태거나 연결이 끊어진 상태 | |
08S01 | 통신 장애 | 데이터 송수신 실패 |
HY000 | 일반 오류 | |
HY001 | 메모리 할당 오류 | 명시된 핸들에 대한 메모리 할당 실패 |
HY009 | 유효하지 않은 인자 (null pointer) 사용 | *sql이 null pointer 임 |
관련 함수#
SQLBindCol
SQLEndTran
SQLExecute
SQLFetch
SQLGetData
SQLPrepare
SQLStmtAttr
예 제#
< $ALTIBASE_HOME/sample/SQLCLI/demo_ex1.cpp 참고 >
sprintf(query,"SELECT * FROM DEMO_EX1");
if (SQLExecDirect(stmt,query, SQL_NTS) != SQL_SUCCESS)
{
execute_err(dbc, stmt, query);
SQLFreeStmt(stmt, SQL_DROP);
return SQL_ERROR;
}