GET_COLUMN_VALUE_FROM_NAME

유효 기간

추출 및 복제

설명

GET_COLUMN_VALUE_FROM_NAME 함수를 사용하여 지정된 열 이름을 사용하여 데이터 레코드에서 열 값을 검색합니다. 열 값은 User Exit 내에서 대부분의 논리에 대한 기준입니다. 복합 논리는 데이터 레코드 내의 개별 열 값을 기반으로 할 수 있습니다.

User Exit의 문자 세션이 SET_SESSION_CHARSET로 운영 체제의 기본 문자 집합이 아닌 값으로 설정되면(ucharset.h 파일의 ULIB_CS_DEFAULT에 정의됨) User Exit과 프로세스 간에 교환되는 문자 데이터가 세션 문자 집합에서 해석됩니다.

다음 조건에 해당하는 경우에만 열 값이 세션 문자 집합으로 설정됩니다.

데이터베이스가 대소문자를 구분하는 경우 호스팅 데이터베이스에 정의된 것과 동일한 대소문자로 객체 이름을 지정해야 합니다. 그렇지 않으면 대소문자를 구분하지 않습니다.

구문

#include "usrdecs.h"
short result_code;
column_def column;
ERCALLBACK (GET_COLUMN_VALUE_FROM_NAME, &column, &result_code);

버퍼

typedef struct
{
char *column_value;
unsigned short max_value_length;
unsigned short actual_value_length;
short null_value;
short remove_column;
short value_truncated;
short column_index;
char *column_name;
/* Version 3 CALLBACK_STRUCT_VERSION */
short column_value_mode;
short source_or_target;
/* Version 2 CALLBACK_STRUCT_VERSION */
char requesting_before_after_ind;
char more_lob_data;
/* Version 3 CALLBACK_STRUCT_VERSION  */
ULibCharSet column_charset;
} column_def;

입력

<column_value>

반환된 열 값을 수락할 버퍼에 대한 포인터입니다.

<max_value_length>

반환된 열 값의 최대 길이입니다. 일반적으로 최대 길이는 열 값 버퍼의 길이입니다. ASCII 형식이 지정된 경우(column_value_mode 참조) 열 값은 널로 종료되며 최대 길이는 열 값의 최대 길이와 같아야 합니다.

<column_name>

반환될 열 값의 열 이름입니다.

<column_value_mode>

열 값의 문자 세트를 나타냅니다.

EXIT_FN_CHAR_FORMAT

ASCII 형식: 값은 널 종료 ASCII(또는 EBCDIC) 문자열입니다(UTF 8로 변환되는 하위 데이터 유형 UTF16_BE에 대해 알려진 예외). 주: 값이 ASCII 문자열로 해석되고 널로 종료되어야 하므로 User Exit에 표시되면 열 값이 잘릴 수 있습니다. 0의 첫번째 값은 문자열 종료자가 됩니다.

EXIT_FN_RAW_FORMAT

내부 Oracle GoldenGate 정규 형식: 이 형식에는 해당하는 경우 2바이트 널 표시기와 2바이트 가변 데이터 길이가 포함됩니다. 모든 문자 데이터 유형에 대해 이 형식에 대해 Oracle GoldenGate에서 문자 집합 변환을 수행하지 않습니다.

EXIT_FN_CNVTED_SESS_CHAR_FORMAT

User Exit 문자 집합: 열 데이터 유형이 다음과 같은 경우에만 적용됩니다.

이 형식은 널로 종료되지 않습니다.

<source_or_target>

소스 또는 대상 데이터 레코드를 사용하여 열 값을 검색할지 여부를 나타내는 다음 중 하나입니다.

EXIT_FN_SOURCE_VAL
EXIT_FN_TARGET_VAL

<requesting_before_after_ind>

이후 이미지 레코드를 처리할 때 업데이트 또는 기본 키 업데이트의 이전 열을 원하는 경우 설정합니다.

기본 키 업데이트 또는 일반(키가 아닌) 업데이트 레코드의 "이미지 후"를 처리하는 동안 열의 "이전" 값을 가져오려면 requesting_before_after_ind 플래그를 BEFORE_IMAGE_VAL로 설정합니다.

requesting_before_after_ind에 대한 명시적 입력이 지정되지 않은 경우 기본 설정은 AFTER_IMAGE_VAL(열의 후 이미지 가져오기)입니다.

이전 이미지를 사용할 수 있도록 하려면 GETUPDATEBEFORES 매개변수를 사용하거나 CUSEREXIT 매개변수 문 내에서 INCLUDEUPDATEBEFORES 옵션을 사용할 수 있습니다.

다음 사항에 유의하십시오.

출력

<column_value>

반환된 열 값에 대한 포인터입니다. column_value_mode가 EXIT_FN_CHAR_FORMAT로 지정된 경우 열 값은 널로 종료된 ASCII 문자열로 반환되고, 그렇지 않은 경우 열 값은 Oracle GoldenGate 내부 표준 형식으로 반환됩니다. ASCII 형식에서 날짜는 다음 형식으로 반환됩니다.

CCYY-MM-DD HH:MI:SS.FFFFFF

소수의 시간 포함은 데이터베이스에 따라 다릅니다.

실제 길이

반환된 열 이름의 문자열 길이입니다. column_value_mode가 EXIT_FN_CHAR_FORMAT로 지정된 경우 실제 길이에는 널 종료자가 포함되지 않습니다.

<null_value>

열 값이 널인지 여부를 나타내는 플래그(0 또는 1)입니다. null_value 플래그가 1이면 열 값 버퍼가 널 바이트로 채워집니다.

<value_truncated>

값이 잘렸는지 여부를 나타내는 플래그(0 또는 1)입니다. 열 값의 길이가 최대 버퍼 길이를 초과하는 경우 잘립니다. column_value_mode가 EXIT_FN_CHAR_FORMAT로 지정된 경우 널 종료자가 열 길이에 포함됩니다.

문자 more_lob_data

기본 레코드에 저장할 수 있는 초기 4K 이외의 LOB 데이터가 더 있는지 여부를 나타내는 플래그입니다. LOB이 4K 제한보다 큰 경우 LOB 단편에 저장됩니다.

반환된 값을 포함하려면 적절한 양의 메모리를 할당해야 합니다. Oracle GoldenGate는 항상 최대 8K의 데이터까지 LOB 열에 액세스하여 User Exit이 할당한 양까지 버퍼를 채웁니다. LOB가 할당된 값보다 큰 경우 모든 데이터가 User Exit에 전송될 때까지 총 열 데이터를 얻기 위해 후속 콜백이 필요합니다.

데이터의 끝을 결정하기 위해 more_lob_data를 평가합니다. User Exit은 새 열에 액세스하기 전에 이 플래그를 CAR_NO_VAL 또는 CHAR_YES_VAL로 설정합니다. 이 플래그가 첫번째 콜백 후에도 여전히 초기화되고 CHAR_YES_VAL 또는 CAR_NO_VAL로 설정되지 않은 경우 다음 중 하나가 true입니다.

열이 LOB일 수 있는지 여부를 확인하기 위해 소스 테이블 메타데이터를 가져오는 것이 좋습니다.

반환 값

EXIT_FN_RET_BAD_COLUMN_DATA
EXIT_FN_RET_COLUMN_NOT_FOUND
EXIT_FN_RET_INVALID_COLUMN
EXIT_FN_RET_INVALID_CONTEXT
EXIT_FN_RET_INVALID_PARAM
EXIT_FN_RET_OK

예제

memset (&col_meta, 0, sizeof(col_meta));
if (record.mapped)
col_meta.source_or_target = EXIT_FN_TARGET_VAL;
else
col_meta.source_or_target = EXIT_FN_SOURCE_VAL;
col_meta.source_or_target = EXIT_FN_SOURCE_VAL;
col_meta.column_name = (char *)malloc(100);
col_meta.max_name_length = 100;
col_meta.column_index = 1;

call_callback (GET_COL_METADATA_FROM_NAME, &col_meta, &result_code);