SQLEmptyLob
SQLEmptyLob#
Empty LOB을 삽입하거나 갱신할 때 사용한다.
구 문#
SQLRETURN SQLEmptyLob(SQLHSTMT stmt,
SQLSMALLINT locatorCType,
SQLUBIGINT targetLocator);
인 자#
| 자료유형 | 인자 | 사용 | 설명 |
|---|---|---|---|
| SQLHSTMT | stmt | 입력 | 검색된 결과들에 대한 명령문 핸들 |
| SQLSMALLINT | locatorCType | 입력 | Target LOB Locator의 C 데이터 타입 식별자. - SQL_C_BLOB_LOCATOR - SQL_C_CLOB_LOCATOR |
| SQLUBIGINT | targetLocator | 입력 | Target LOB Locator |
결괏값#
SQL_SUCCESS
SQL_INVALID_HANDLE
SQL_ERROR
설 명#
이 함수는 타켓 LOB locator에 길이가 0인 Empty LOB 을 삽입하거나 갱신한다.
LOB 데이터 삽입#
INSERT 문으로 Emtpy LOB을 삽입할 때 이 함수를 사용할 수 있다.
LOB 데이터 갱신#
UPDATE, SELECT FOR UPDATE 문으로 LOB 타입 컬럼을 Empty LOB으로 갱신할 때 이 함수를 사용할 수 있다. 현재 트랜잭션에서 유효하게 열려 있는 LOB Locator만 함수의 인자로 사용할 수 있다.
주의 사항
- SELECT FOR UPDATE문에서 이 함수를 사용하는 경우 열린 LOB locator에 길이가 1 이상인 LOB 데이터가 이미 존재하면 SQL_ERROR 를 리턴한다.
-
- 해결 방법: 길이가 1 이상인 LOB 데이터가 존재할 때 Emtpy LOB을 삽입하려면 SQLTrimLob()을 사용해야 한다.
- 인자로 전달되는 타겟 LOB Locator는 반드시 현재의 트랜잭션에서 생성되거나 조회된 것이어야 한다.
진 단#
| SQLSTATE | 설명 | 부연설명 |
|---|---|---|
| 08S01 | 통신 회선 장애 (데이터 송수신 실패) | Altibase CLI 드라이버와 DB간에 함수 처리가 완료되기 전에 통신 회선 실패 |
| HY000 | 일반 오류 |
관련 함수#
SQLGetLobLength2
예 제#
SQLEmptyLob() 함수를 이용하여, Empty LOB을 삽입한다.
#테이블은 아래와 같이 생성되었다고 가정한다.
# CREATE TABLE T1 (i1 INTEGER PRIMARY KEY, i2 CLOB);
SQLINTEGER lobInd;
SQLUBIGINT lobLoc;
strcpy(query, "INSERT INTO T1 VALUES (5, ?)");
if (SQLPrepare(stmt, query, SQL_NTS) != SQL_SUCCESS)
{
execute_err(dbc, stmt, "SQLPrepare : ");
SQLFreeStmt(stmt, SQL_DROP);
return SQL_ERROR;
}
/*
SQLExecute 함수에서 LOB 위치 입력기를 얻을 수 있도록 SQLBindParameter 함수에서 LOB 위치 입력기 인자를 바인딩한다.
*/
if (SQLBindParameter(stmt, 1, SQL_PARAM_OUTPUT, SQL_C_CLOB_LOCATOR, SQL_CLOB_LOCATOR, 0, 0, &lobLoc, 0, &lobInd) != SQL_SUCCESS)
{
execute_err(dbc, stmt, "SQLBindParameter : ");
SQLFreeStmt(stmt, SQL_DROP);
return SQL_ERROR;
}
/*
SQLExecute 함수를 호출한다.
*/
if (SQLExecute(stmt) != SQL_SUCCESS)
{
execute_err(dbc, stmt, "SQLExecute : ");
SQLFreeStmt(stmt, SQL_DROP);
return SQL_ERROR;
}
/* SQLEmptyLOB 함수로 Emtpy LOB을 삽입한다. */
if (SQLEmptyLob(stmt, SQL_C_CLOB_LOCATOR, lobLoc) != SQL_SUCCESS)
{
execute_err(dbc, stmt, "SQLPutLob : ");
SQLFreeStmt(stmt, SQL_DROP);
return SQL_ERROR;
}
if (SQLFreeLob(stmt, lobLoc) != SQL_SUCCESS)
{
execute_err(dbc, stmt, "SQLFreeLob : ");
SQLFreeStmt(stmt, SQL_DROP);
return SQL_ERROR;
}