다음을 통해 공유


위치 지정 업데이트(ODBC)

ODBC는 커서에서 위치 지정 업데이트를 수행하는 두 가지 방법을 지원합니다.

  • SQLSetPos

  • WHERE CURRENT OF 절

보다 일반적인 방법은 SQLSetPos를 사용하는 것이며 여기에는 다음 옵션이 있습니다.

  • SQL_POSITION
    커서를 현재 행 집합의 특정 행에 위치시킵니다.

  • SQL_REFRESH
    커서가 현재 위치한 행으로부터 가져온 값을 갖는 결과 집합 열에 바인딩된 프로그램 변수를 새로 고칩니다.

  • SQL_UPDATE
    결과 집합 열에 바인딩된 프로그램 변수에 저장된 값으로 커서의 현재 행을 업데이트합니다.

  • SQL_DELETE
    커서에서 현재 행을 삭제합니다.

SQLSetPos는 서버 커서를 사용하도록 문 핸들 커서 특성이 설정되어 있는 경우 모든 문 결과 집합에 사용할 수 있습니다. 결과 집합 열은 프로그램 변수에 바인딩되어야 합니다. 응용 프로그램은 행을 인출하면 곧바로 SQLSetPos(SQL_POSTION)를 호출하여 커서를 해당 행에 위치시킵니다. 그런 다음 SQLSetPos(SQL_DELETE)를 호출하여 현재 행을 삭제하거나, 새 데이터 값을 바인딩된 프로그램 변수로 이동하고 SQLSetPos(SQL_UPDATE)를 호출하여 현재 행을 업데이트할 수 있습니다.

응용 프로그램은 SQLSetPos를 사용하여 행 집합의 특정 행을 업데이트하거나 삭제할 수 있습니다. SQLSetPos를 호출하는 편이 SQL 문을 작성하고 실행하는 것보다 훨씬 간편합니다. SQLSetPos는 현재 행 집합에 대해 작동하며 SQLFetchScroll을 호출한 후에만 사용할 수 있습니다.

행 집합 크기는 SQL_ATTR_ROW_ARRAY_SIZE라는 특성 인수를 사용하여 SQLSetStmtAttr을 호출함으로써 설정합니다. 이 경우 새 행 집합 크기가 SQLSetPos에 사용되지만 SQLFetch 또는 SQLFetchScroll을 호출한 후에만 변경 사항이 적용됩니다. 예를 들어 행 집합 크기가 변경되면 SQLSetPos가 호출된 다음 SQLFetch 또는 SQLFetchScroll이 호출됩니다. SQLSetPos에 대한 호출에는 이전 행 집합 크기가 사용되지만 SQLFetch 또는 SQLFetchScroll에는 새 행 집합 크기가 사용됩니다.

행 집합의 첫 번째 행 번호는 1입니다. SQLSetPos의 RowNumber 인수는 행 집합에서 행을 고유하게 식별해야 합니다. 즉, 해당 값은 1 및 가장 최근에 인출된 행 번호 사이에 있어야 합니다. 이 값은 행 집합 크기보다 작을 수 있습니다. RowNumber가 0이면 행 집합의 모든 행에 작업이 적용됩니다.

SQLSetPos의 삭제 작업은 데이터 원본에서 선택한 테이블 행을 하나 이상 삭제합니다. SQLSetPos를 사용하여 행을 삭제하는 경우 응용 프로그램은 Operation이 SQL_DELETE로 설정되고 RowNumber가 삭제할 행 번호로 설정된 SQLSetPos를 호출합니다. RowNumber가 0이면 행 집합의 모든 행이 삭제됩니다.

SQLSetPos에서 결과가 반환되면 삭제된 행은 현재 행이 되고 해당 상태는 SQL_ROW_DELETED가 됩니다. 이 행은 SQLGetData 또는 SQLSetPos에 대한 호출과 같이 위치가 지정된 추가 작업에 사용할 수 없습니다.

행 집합에서 모든 행을 삭제하는 경우(RowNumber가 0인 경우) 응용 프로그램은 SQLSetPos의 업데이트 작업과 마찬가지로 행 작업 배열을 사용하여 드라이버가 특정 행을 삭제하지 못하도록 할 수 있습니다.

삭제되는 모든 행은 결과 집합에 있는 행이여야 합니다. 인출로 인해 응용 프로그램 버퍼가 가득 차고 행 상태 배열이 유지되는 경우 이러한 각각의 행 위치에서 값은 SQL_ROW_DELETED, SQL_ROW_ERROR 또는 SQL_ROW_NOROW일 수 없습니다.

위치 지정 업데이트는 UPDATE, DELETE 및 INSERT 문에 WHERE CURRENT OF 절을 사용하여 수행할 수도 있습니다. WHERE CURRENT OF 절에는 SQLGetCursorName 함수 호출 시 ODBC에서 생성되거나 SQLSetCursorName을 호출하여 사용자가 직접 지정할 수 있는 커서 이름이 필요합니다. 다음은 ODBC 응용 프로그램에서 WHERE CURRENT OF 업데이트를 수행하는 일반적인 단계입니다.

  • SQLSetCursorName을 호출하여 문 핸들에 대해 커서 이름을 설정합니다.

  • FOR UPDATE OF 절을 사용하여 SELECT 문을 작성하고 실행합니다.

  • SQLFetchScroll을 호출하여 행 집합을 검색하거나 SQLFetch를 호출하여 행을 검색합니다.

  • SQLSetPos(SQL_POSITION)를 호출하여 커서를 행에 위치시킵니다.

  • SQLSetCursorName으로 설정된 커서 이름을 사용하여 WHERE CURRENT OF 절이 있는 UPDATE 문을 작성하고 실행합니다.

또는 SELECT 문을 실행하기 전에 SQLSetCursorName을 호출하는 대신 SELECT 문을 실행한 후에 SQLGetCursorName을 호출할 수도 있습니다. SQLSetCursorName을 사용하여 커서 이름을 설정하지 않으면 SQLGetCursorName은 ODBC에서 할당된 기본 커서 이름을 반환합니다.

서버 커서를 사용할 때는 WHERE CURRENT OF 절보다 SQLSetPos를 사용하는 것이 좋습니다. ODBC 커서 라이브러리에 업데이트 가능한 정적 커서를 사용하면 커서 라이브러리가 기본 테이블의 키 값을 통해 WHERE 절을 추가하는 방법으로 WHERE CURRENT OF 업데이트를 구현합니다. 이 경우 테이블의 키가 고유하지 않으면 불필요한 업데이트가 수행될 수 있습니다.