콘텐츠로 이동

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;
}