34.15. 인포믹스호환성 모드#

ecpg소위에서 실행될 수 있습니다Informix 호환 모드. 이 모드가 활성화되어 있으면 마치 해당 모드인 것처럼 동작하려고 합니다.인포믹스에 대한 사전 컴파일러인포믹스E/SQL. 일반적으로 이렇게 하면 대신 달러 기호를 사용할 수 있습니다.EXEC SQL임베디드 SQL 명령을 도입하기 위한 프리미티브:

$int j = 3;
$CONNECT TO :db이름;
$CREATE TABLE 테스트(i INT PRIMARY KEY, j INT);
$INSERT INTO test(i, j) VALUES (7, :j);
$COMMIT;

참고

다음 사이에 공백이 있어서는 안 됩니다.$그리고 다음 전처리기 지시어, 즉,포함, 정의, ifdef, etc. 그렇지 않으면 전처리기가 토큰을 호스트 변수로 구문 분석합니다.

두 가지 호환성 모드가 있습니다:INFORMIX, INFORMIX_SE

이 호환 모드를 사용하는 프로그램을 링크할 때, 다음에 링크해야 한다는 것을 기억하세요libcompatECPG와 함께 배송됩니다.

이전에 설명한 구문 설탕 외에,인포믹스호환성 모드는 E/SQL에서 ECPG로 알려진 내장 SQL 문뿐만 아니라 데이터의 입력, 출력 및 변환을 위한 일부 기능을 포팅합니다.

인포믹스호환성 모드는 ECPG의 pgtypeslib 라이브러리와 밀접하게 연결되어 있습니다. pgtypeslib는 SQL 데이터 유형을 C 호스트 프로그램 내의 데이터 유형과 대부분의 추가 기능에 매핑합니다.인포믹스호환성 모드를 사용하면 해당 C 호스트 프로그램 유형에서 작업할 수 있습니다. 그러나 호환성 범위는 제한되어 있습니다. 복사를 시도하지 않습니다.인포믹스행동; 이는 거의 동일한 작업을 수행할 수 있게 하고 동일한 이름과 동일한 기본 동작을 갖는 함수를 제공하지만 다음을 사용하는 경우 드롭인 대체가 아닙니다.인포믹스현재. 또한 일부 데이터 유형이 다릅니다. 예를 들어,포스트그레SQL의 날짜/시간 및 간격 유형은 예를 들어 다음과 같은 범위에 대해 알지 못합니다.년-분따라서 ECPG에서도 그에 대한 지원을 찾을 수 없습니다.

34.15.1. 추가 유형#

오른쪽으로 잘린 문자열 데이터를 저장하기 위한 Informix 특수 "문자열" 의사 유형은 이제 Informix 모드에서 사용하지 않고 지원됩니다.typedef. 실제로 Informix 모드에서 ECPG는 다음을 포함하는 소스 파일 처리를 거부합니다.typedef 일부 유형 문자열;

EXEC SQL 시작 선언 섹션;
문자열 사용자 ID; /* 이 변수에는 잘린 데이터가 포함됩니다 */
EXEC SQL END 선언 섹션;

EXEC SQL FETCH MYCUR INTO :userid;

34.15.2. 추가/누락된 내장 SQL 문#

데이터베이스 닫기 #

이 명령문은 현재 연결을 닫습니다. 사실 이것은 ECPG의 동의어이다.현재 연결 끊기:

$CLOSE 데이터베이스;                /* 현재 연결을 끊는다 */
EXEC SQL 닫기 데이터베이스;
무료 커서_이름 #

Informix의 ESQL/C와 ECPG 작동 방식의 차이로 인해(즉, 순전히 문법 변환 단계와 기본 런타임 라이브러리에 의존하는 단계) 차이가 없습니다.무료 커서_이름ECPG의 진술. 이는 ECPG에서,커서 선언커서 이름을 사용하는 런타임 라이브러리에 대한 함수 호출로 변환되지 않습니다. 즉, ECPG 런타임 라이브러리에는 SQL 커서의 런타임 기록이 없고 PostgreSQL 서버에서만 기록됩니다.

무료 성명_이름 #

무료 성명_이름은의 동의어입니다.DEALLOCATE PREPARE 명령문_이름.

34.15.3. Informix 호환 SQLDA 설명자 영역#

Informix 호환 모드는 다음에 설명된 것과 다른 구조를 지원합니다.섹션 34.7.2. 아래를 참조하세요:

구조체 sqlvar_compat

    짧은 sqltype;
    int sqllen;
    char *sqldata;
    짧은 *sqlind;
    char *sql이름;
    char *sqlformat;
    짧은 SQLitype;
    짧은 SQLilen;
    char *sqlidata;
    int sqlxid;
    char *sqltypename;
    짧은 sqltypelen;
    짧은 sqlownerlen;
    짧은 sqlsourcetype;
    char *sql소유자명;
    int sqlsourceid;
    char *sqlilongdata;
    int sqlflags;
    무효 *sqlreserved;
;

구조체 sqlda_compat

    짧은 sqld;
    struct sqlvar_compat *sqlvar;
    char 설명_이름[19];
    짧은 desc_occ;
    구조체 sqlda_compat *desc_next;
    무효 *예약됨;
;

typedef struct sqlvar_compat sqlvar_t;
typedef struct sqlda_compat sqlda_t;

전역 속성은 다음과 같습니다:

sqld #

필드의 수SQLDA설명자.

sqlvar #

필드별 속성에 대한 포인터입니다.

desc_name #

미사용, 0바이트로 채워짐.

desc_occ #

할당된 구조의 크기.

desc_next #

결과 세트에 둘 이상의 레코드가 포함된 경우 다음 SQLDA 구조에 대한 포인터.

예약됨 #

사용되지 않은 포인터, NULL이 포함되어 있습니다. Informix 호환성을 위해 유지됩니다.

필드별 속성은 아래와 같습니다. 해당 속성은 다음에 저장됩니다.sqlvar배열:

sqltype #

필드 유형. 상수가 들어있습니다.sqltypes.h

sqllen #

필드 데이터의 길이.

sqldata #

필드 데이터에 대한 포인터입니다. 포인터는 다음과 같습니다.문자 *유형, 그것이 가리키는 데이터는 바이너리 형식입니다. 예:

int intval;

스위치(sqldata-sqlvar[i].sqltype)

    사례 SQLINTEGER:
        intval = *(int *)sqldata-sqlvar[i].sqldata;
        부서지다;
  ...
sqlind #

NULL 표시기를 가리키는 포인터. DESCRIBE 또는 FETCH에 의해 반환되면 항상 유효한 포인터입니다. 에 대한 입력으로 사용되는 경우실행 ... sqlda를 사용하여;그러면 NULL 포인터 값은 이 필드의 값이 NULL이 아님을 의미합니다. 그렇지 않으면 유효한 포인터 및sqlitype올바르게 설정되어야 합니다. 예:

if (*(int2 *)sqldata-sqlvar[i].sqlind != 0)
    printf("값은 NULL입니다\n");
sqlname #

필드 이름. 0으로 끝나는 문자열입니다.

sqlformat #

Informix에 예약됨, 값PQfformat필드용.

sqlitype #

NULL 표시 데이터의 유형입니다. 서버에서 데이터를 반환할 때는 항상 SQLSMINT입니다. 때SQLDA은 매개변수화된 쿼리에 사용되며 데이터는 세트 유형에 따라 처리됩니다.

sqlilen #

NULL 표시 데이터의 길이.

sqlxid #

필드의 확장 유형, 결과PQftype.

sqltypename
sqltypelen
sqlownerlen
sqlsourcetype
sqlownername
sqlsourceid
sqlflags
sqlreserved #

미사용.

sqlilongdata #

다음과 같습니다sqldataifsqllen32kB보다 큽니다.

예:

EXEC SQL INCLUDE sqlda.h;

    sqlda_t *sqlda; /* DECLARE SECTION에 포함될 필요는 없습니다 */

    EXEC SQL 시작 선언 섹션;
    char *prep_stmt = "table1에서 * 선택";
    나는 int;
    EXEC SQL END 선언 섹션;

    ...

    EXEC SQL PREPARE mystmt FROM :prep_stmt;

    EXEC SQL DESCRIBE mystmt INTO sqlda;

    printf("필드 수: %d\n", sqlda-sqld);
    for (i = 0; i < sqlda-sqld; i++)
      printf("필드 %d: \"%s\"\n", sqlda-sqlvar[i]-sqlname);

    EXEC SQL DECLARE mycursor CURSOR FOR mystmt;
    EXEC SQL OPEN mycursor;
    발견되지 않은 경우 EXEC SQL이 실행됩니다.

    동안 (1)

      EXEC SQL FETCH mycursor USING sqlda;

    EXEC SQL CLOSE mycursor;

    무료(sqlda); /* 주요 구조는 모두 free()입니다.
                  * sqlda와 sqlda-sqlvar는 하나의 할당 영역에 있음 */

자세한 내용은 다음을 참조하세요.sqlda.h헤더 및src/interfaces/ecpg/test/compat_informix/sqlda.pgc회귀 테스트.

34.15.4. 추가 기능#

십년 #

두 개의 십진수 유형 값을 추가합니다.

int decadd(십진수 *arg1, 십진수 *arg2, 십진수 *sum);

토토 베이 10진수 유형의 첫 번째 피연산자에 대한 포인터를 받습니다(arg1), 10진수 유형의 두 번째 피연산자에 대한 포인터(arg2) 및 합계를 포함할 10진수 유형의 값에 대한 포인터(합계). 성공하면 토토 베이 0을 반환합니다.ECPG_INFORMIX_NUM_OVERFLOW오버플로의 경우 반환되며ECPG_INFORMIX_NUM_UNDERFLOW언더플로의 경우. 다른 실패의 경우 -1이 반환됩니다.errno각각으로 설정됨errnopgtypeslib의 수.

decmp #

십진수 유형의 두 변수를 비교하십시오.

int deccmp(십진수 *arg1, 십진수 *arg2);

토토 베이 첫 번째 소수 값에 대한 포인터를 받습니다(arg1), 두 번째 소수 값에 대한 포인터(arg2) 더 큰 값을 나타내는 정수 값을 반환합니다.

  • 1, 값이 다음과 같은 경우arg1포인트가 해당 값보다 큽니다.var2다음을 가리킨다

  • -1, 값이 다음과 같은 경우arg1점은 해당 값보다 작습니다.arg2다음을 가리킨다

  • 0, 해당 값이arg1가리키는 값과 그 값arg2포인트가 같음

deccopy #

십진수 값을 복사하세요.

void deccopy(십진수 *src, 십진수 *target);

토토 베이 첫 번째 인수로 복사되어야 하는 십진수 값에 대한 포인터를 받습니다(src) 및 10진수 유형의 대상 구조에 대한 포인터(대상)을 두 번째 인수로 사용합니다.

deccvasc #

값을 ASCII 표현에서 십진수 유형으로 변환합니다.

int deccvasc(char *cp, int len, 십진수 *np);

함수는 변환될 숫자의 문자열 표현을 포함하는 문자열에 대한 포인터를 받습니다(cp) 및 길이len. np은 작업 결과를 저장하는 10진수 값에 대한 포인터입니다.

유효한 형식은 예를 들면 다음과 같습니다:-2, .794, +3.44, 592.49E07또는-32.84e-4.

함수는 성공 시 0을 반환합니다. 오버플로 또는 언더플로가 발생한 경우ECPG_INFORMIX_NUM_OVERFLOW또는ECPG_INFORMIX_NUM_UNDERFLOW반환되었습니다. ASCII 표현을 구문 분석할 수 없는 경우,ECPG_INFORMIX_BAD_NUMERIC반환되거나ECPG_INFORMIX_BAD_EXPONENT지수를 분석하는 동안 이 문제가 발생한 경우.

deccvdbl #

Double 유형의 값을 10진수 유형의 값으로 변환합니다.

int deccvdbl(이중 dbl, 십진수 *np);

토토 베이 첫 번째 인수로 변환되어야 하는 double 유형의 변수를 받습니다(dbl). 두 번째 인수(np), 토토 베이 연산 결과를 보유해야 하는 10진수 변수에 대한 포인터를 받습니다.

토토 베이 성공 시 0을 반환하고 변환에 실패하면 음수 값을 반환합니다.

decvint #

int 유형의 값을 10진수 유형의 값으로 변환합니다.

int deccvint(int in, 십진수 *np);

토토 베이 첫 번째 인수로 변환되어야 하는 int 유형의 변수를 받습니다(). 두 번째 인수(np), 토토 베이 연산 결과를 보유해야 하는 10진수 변수에 대한 포인터를 받습니다.

토토 베이 성공 시 0을 반환하고 변환에 실패하면 음수 값을 반환합니다.

deccvlong #

long 유형의 값을 10진수 유형의 값으로 변환합니다.

int deccvlong(long lng, 십진수 *np);

토토 베이 첫 번째 인수로 변환되어야 하는 long 유형의 변수를 받습니다(lng). 두 번째 인수(np), 토토 베이 연산 결과를 보유해야 하는 10진수 변수에 대한 포인터를 받습니다.

토토 베이 성공 시 0을 반환하고 변환에 실패하면 음수 값을 반환합니다.

decdiv #

십진수 유형의 두 변수를 나눕니다.

int decdiv(십진수 *n1, 십진수 *n2, 십진수 *결과);

토토 베이 첫 번째 변수에 대한 포인터를 받습니다(n1) 및 두 번째(n2) 피연산자 및 계산n1/n2. 결과은 작업 결과를 보유해야 하는 변수에 대한 포인터입니다.

성공하면 0이 반환되고 나누기가 실패하면 음수 값이 반환됩니다. 오버플로 또는 언더플로가 발생한 경우 함수는 다음을 반환합니다.ECPG_INFORMIX_NUM_OVERFLOW또는ECPG_INFORMIX_NUM_UNDERFLOW각각. 0으로 나누려는 시도가 관찰되면 함수는 다음을 반환합니다.ECPG_INFORMIX_DIVIDE_ZERO.

decmul #

십진수 두 값을 곱합니다.

int decmul(십진수 *n1, 십진수 *n2, 십진수 *결과);

토토 베이 첫 번째 변수에 대한 포인터를 받습니다(n1) 및 두 번째(n2) 피연산자 및 계산n1*n2. 결과은 작업 결과를 보유해야 하는 변수에 대한 포인터입니다.

성공 시 0이 반환되고, 곱셈이 실패하면 음수 값이 반환됩니다. 오버플로 또는 언더플로가 발생한 경우 함수는 다음을 반환합니다.ECPG_INFORMIX_NUM_OVERFLOW또는ECPG_INFORMIX_NUM_UNDERFLOW각각.

decsub #

소수점 하나를 다른 값에서 빼세요.

int decsub(십진수 *n1, 십진수 *n2, 십진수 *결과);

토토 베이 첫 번째 변수에 대한 포인터를 받습니다(n1) 및 두 번째(n2) 피연산자 및 계산n1-n2. 결과은 작업 결과를 보유해야 하는 변수에 대한 포인터입니다.

성공하면 0이 반환되고 빼기가 실패하면 음수 값이 반환됩니다. 오버플로 또는 언더플로가 발생한 경우 함수는 다음을 반환합니다.ECPG_INFORMIX_NUM_OVERFLOW또는ECPG_INFORMIX_NUM_UNDERFLOW각각.

dectoasc #

10진수 유형의 변수를 C char* 문자열의 ASCII 표현으로 변환합니다.

int dectoasc(decimal *np, char *cp, int len, int right)

토토 베이 10진수 유형의 변수에 대한 포인터를 받습니다(np) 텍스트 표현으로 변환됩니다.cp은 작업 결과를 보관해야 하는 버퍼입니다. 매개변수맞아요은 출력에 소수점 이하 몇 자리까지 포함되어야 하는지를 지정합니다. 결과는 이 소수 자릿수로 반올림됩니다. 설정맞아요to -1은 사용 가능한 모든 십진수가 출력에 포함되어야 함을 나타냅니다. 다음으로 표시되는 출력 버퍼의 길이인 경우len후행 0바이트를 포함하는 텍스트 표현을 보유하기에 충분하지 않습니다. 단 하나의*문자가 결과에 저장되고 -1이 반환됩니다.

토토 베이 버퍼인 경우 -1을 반환합니다.cp너무 작거나ECPG_INFORMIX_OUT_OF_MEMORY메모리가 고갈된 경우.

dectodbl #

10진수 유형의 변수를 double로 변환합니다.

int dectodbl(십진수 *np, 이중 *dblp);

토토 베이 변환할 십진수 값에 대한 포인터를 받습니다(np) 및 연산 결과를 보유해야 하는 이중 변수에 대한 포인터(dblp).

성공 시 0이 반환되고 변환이 실패하면 음수 값이 반환됩니다.

디토인트 #

10진수 유형의 변수를 정수로 변환합니다.

int dectoint(십진수 *np, int *ip);

토토 베이 변환할 십진수 값에 대한 포인터를 받습니다(np) 및 연산 결과를 보유해야 하는 정수 변수에 대한 포인터(ip).

성공 시 0이 반환되고 변환이 실패하면 음수 값이 반환됩니다. 오버플로가 발생한 경우,ECPG_INFORMIX_NUM_OVERFLOW반환되었습니다.

ECPG 구현은 다음과 다릅니다.인포믹스구현.인포믹스정수를 -32767에서 32767 사이의 범위로 제한하는 반면, ECPG 구현의 제한은 아키텍처에 따라 다릅니다. (INT_MIN .. INT_MAX).

덱토롱 #

10진수 유형의 변수를 긴 정수로 변환합니다.

int dectolong(십진수 *np, long *lngp);

토토 베이 변환할 십진수 값에 대한 포인터를 받습니다(np) 및 작업 결과를 보유해야 하는 긴 변수에 대한 포인터(lngp).

성공 시 0이 반환되고 변환이 실패하면 음수 값이 반환됩니다. 오버플로가 발생한 경우,ECPG_INFORMIX_NUM_OVERFLOW반환되었습니다.

ECPG 구현은 다음과 다릅니다.인포믹스구현.인포믹스긴 정수를 -2,147,483,647에서 2,147,483,647 사이의 범위로 제한하지만 ECPG 구현의 제한은 아키텍처에 따라 다릅니다. (-LONG_MAX .. LONG_MAX).

rdatestr #

날짜를 C 문자* 문자열로 변환합니다.

int rdatestr(date d, char *str);

토토 베이 두 개의 인수를 받습니다. 첫 번째 인수는 변환할 날짜입니다(d) 두 번째는 대상 문자열에 대한 포인터입니다. 출력 형식은 항상yyyy-mm-dd, 따라서 문자열에 최소 11바이트(0바이트 종결자 포함)를 할당해야 합니다.

이 토토 베이 성공 시 0을 반환하고 오류 시 음수 값을 반환합니다.

ECPG의 구현은 다음과 다릅니다.인포믹스구현. 에서인포믹스형식은 환경 변수 설정에 따라 영향을 받을 수 있습니다. 그러나 ECPG에서는 출력 형식을 변경할 수 없습니다.

rstrdate #

날짜의 텍스트 표현을 분석합니다.

int rstrdate(char *str, 날짜 *d);

토토 베이 변환할 날짜의 텍스트 표현을 받습니다 (str) 및 날짜 유형의 변수에 대한 포인터(d). 이 기능을 사용하면 형식 마스크를 지정할 수 없습니다. 기본 형식 마스크를 사용합니다.인포믹스이것은mm/dd/yyyy. 내부적으로 이 함수는 다음을 통해 구현됩니다.rdefmtdate. 그러므로rstrdate더 빠르지 않으며 선택권이 있다면 선택해야 합니다rdefmtdate형식 마스크를 명시적으로 지정할 수 있습니다.

함수는 다음과 동일한 값을 반환합니다.rdefmtdate.

r오늘 #

현재 날짜를 가져옵니다.

void rtoday(date *d);

토토 베이 날짜 변수에 대한 포인터를 받습니다(d) 현재 날짜로 설정됩니다.

내부적으로 이 함수는 다음을 사용합니다.PGTYPESdate_today함수.

rjulmdy #

날짜 유형의 변수에서 일, 월 및 연도 값을 추출합니다.

int rjulmdy(date d, short mdy[3]);

토토 베이 날짜를 수신합니다d및 3개의 짧은 정수 값 배열에 대한 포인터mdy. 변수 이름은 순차적 순서를 나타냅니다.mdy[0]월의 숫자를 포함하도록 설정됩니다.mdy[1]일의 값으로 설정되며mdy[2]연도가 포함됩니다.

함수는 현재 항상 0을 반환합니다.

함수는 내부적으로 다음을 사용합니다.PGTYPESdate_julmdy함수.

rdefmtdate #

문자열을 날짜 유형의 값으로 변환하려면 형식 마스크를 사용하십시오.

int rdefmtdate(date *d, char *fmt, char *str);

함수는 작업 결과를 보유해야 하는 날짜 값에 대한 포인터를 받습니다(d), 날짜 구문 분석에 사용할 형식 마스크(fmt) 및 날짜의 텍스트 표현을 포함하는 C char* 문자열(str). 텍스트 표현은 형식 마스크와 일치해야 합니다. 그러나 문자열을 형식 마스크에 1:1로 매핑할 필요는 없습니다. 이 함수는 순차 순서만 분석하고 리터럴을 찾습니다.yy또는yyyy연도의 위치를 나타내는mm월의 위치를 표시하고dd오늘의 위치를 나타냅니다.

함수는 다음 값을 반환합니다:

  • 0 - 함수가 성공적으로 종료되었습니다.

  • ECPG_INFORMIX_ENOSHORTDATE- 날짜에는 일, 월, 연도 사이의 구분 기호가 포함되어 있지 않습니다. 이 경우 입력 문자열의 길이는 정확히 6바이트 또는 8바이트여야 하지만 그렇지 않습니다.

  • ECPG_INFORMIX_ENOTDMY- 형식 문자열이 연도, 월, 일의 순차적 순서를 올바르게 표시하지 않았습니다.

  • ECPG_INFORMIX_BAD_DAY- 입력 문자열에 유효한 날짜가 포함되어 있지 않습니다.

  • ECPG_INFORMIX_BAD_MONTH- 입력 문자열에 유효한 월이 포함되어 있지 않습니다.

  • ECPG_INFORMIX_BAD_YEAR- 입력 문자열에 유효한 연도가 포함되어 있지 않습니다.

내부적으로 이 함수는 다음을 사용하도록 구현되었습니다.PGTYPESdate_defmt_asc함수. 예제 입력 표는 해당 참조를 참조하세요.

rfmtdate #

형식 마스크를 사용하여 날짜 유형의 변수를 텍스트 표현으로 변환합니다.

int rfmtdate(date d, char *fmt, char *str);

토토 베이 변환할 날짜를 받습니다 (d), 형식 마스크(fmt) 및 날짜의 텍스트 표현을 보유할 문자열(str).

성공 시 0이 반환되고, 오류가 발생하면 음수 값이 반환됩니다.

내부적으로 이 함수는 다음을 사용합니다.PGTYPESdate_fmt_asc함수, 예제는 해당 참조를 참조하세요.

rmdyjul #

날짜의 일, 월, 연도를 지정하는 3개의 짧은 정수 배열에서 날짜 값을 생성하십시오.

int rmdyjul(short mdy[3], 날짜 *d);

토토 베이 3개의 짧은 정수 배열을 받습니다(mdy) 및 작업 결과를 보유해야 하는 날짜 유형의 변수에 대한 포인터입니다.

현재 함수는 항상 0을 반환합니다.

함수를 사용하기 위해 내부적으로 함수가 구현되어 있습니다PGTYPESdate_mdyjul.

rdayofweek #

날짜 값에 대한 요일을 나타내는 숫자를 반환합니다.

int rdayofweek(날짜 d);

토토 베이 날짜 변수를 받습니다.d유일한 인수로 이 날짜의 요일을 나타내는 정수를 반환합니다.

  • 0 - 일요일

  • 1 - 월요일

  • 2 - 화요일

  • 3 - 수요일

  • 4 - 목요일

  • 5 - 금요일

  • 6 - 토요일

함수를 사용하기 위해 내부적으로 함수가 구현되어 있습니다PGTYPESdate_dayofweek.

dtcurrent #

현재 타임스탬프를 검색하세요.

void dtcurrent(timestamp *ts);

함수는 현재 타임스탬프를 검색하고 이를 타임스탬프 변수에 저장합니다.ts다음을 가리킵니다.

dtcvasc #

타임스탬프를 텍스트 표현에서 타임스탬프 변수로 구문 분석합니다.

int dtcvasc(char *str, 타임스탬프 *ts);

토토 베이 구문 분석할 문자열을 받습니다(str) 및 작업 결과를 보유해야 하는 타임스탬프 변수에 대한 포인터(ts).

이 토토 베이 성공 시 0을 반환하고 오류 시 음수 값을 반환합니다.

내부적으로 이 함수는 다음을 사용합니다.PGTYPEStimestamp_from_asc함수. 예제 입력이 포함된 표는 해당 참조를 참조하세요.

dtcvfmtasc #

형식 마스크를 사용하여 텍스트 표현에서 타임스탬프를 타임스탬프 변수로 분석합니다.

dtcvfmtasc(char *inbuf, char *fmtstr, 타임스탬프 *dtvalue)

토토 베이 구문 분석할 문자열을 받습니다(inbuf), 사용할 형식 마스크(fmtstr) 및 작업 결과를 보유해야 하는 타임스탬프 변수에 대한 포인터(dt값).

이 기능은 다음을 통해 구현됩니다.PGTYPEStimestamp_defmt_asc함수. 사용할 수 있는 형식 지정자 목록은 해당 문서를 참조하세요.

토토 베이 성공 시 0을 반환하고 오류 시 음수 값을 반환합니다.

dtsub #

하나의 타임스탬프를 다른 타임스탬프에서 빼고 간격 유형의 변수를 반환합니다.

int dtsub(타임스탬프 *ts1, 타임스탬프 *ts2, 간격 *iv);

토토 베이 타임스탬프 변수를 뺄 것입니다.ts2다음 타임스탬프 변수를 가리킵니다.ts1다음 간격 변수에 결과를 가리키고 저장합니다iv다음을 가리킨다.

성공하면 토토 베이 0을 반환하고 오류가 발생하면 음수 값을 반환합니다.

dttoasc #

타임스탬프 변수를 C char* 문자열로 변환합니다.

int dttoasc(timestamp *ts, char *output);

토토 베이 변환할 타임스탬프 변수에 대한 포인터를 받습니다 (ts) 및 작업 결과를 보유해야 하는 문자열(출력). 변환합니다tsSQL 표준에 따른 텍스트 표현으로, 이는 다음과 같습니다.YYYY-MM-DD HH:MM:SS.

성공하면 토토 베이 0을 반환하고 오류가 발생하면 음수 값을 반환합니다.

dttofmtasc #

형식 마스크를 사용하여 타임스탬프 변수를 C 문자*로 변환합니다.

int dttofmtasc(timestamp *ts, char *output, int str_len, char *fmtstr);

토토 베이 첫 번째 인수로 변환할 타임스탬프에 대한 포인터를 받습니다 (ts), 출력 버퍼에 대한 포인터(출력), 출력 버퍼에 할당된 최대 길이(str_len) 및 변환에 사용할 형식 마스크(fmtstr).

성공하면 토토 베이 0을 반환하고 오류가 발생하면 음수 값을 반환합니다.

내부적으로 이 함수는 다음을 사용합니다.PGTYPEStimestamp_fmt_asc함수. 어떤 형식 마스크 지정자를 사용할 수 있는지에 대한 자세한 내용은 해당 참조를 참조하세요.

intoas #

간격 변수를 C char* 문자열로 변환합니다.

int intoasc(간격 *i, char *str);

토토 베이 변환할 간격 변수에 대한 포인터를 받습니다(i) 및 작업 결과를 보유해야 하는 문자열(str). 변환합니다iSQL 표준에 따른 텍스트 표현으로, 이는 다음과 같습니다.YYYY-MM-DD HH:MM:SS.

성공하면 토토 베이 0을 반환하고 오류가 발생하면 음수 값을 반환합니다.

rfmtlong #

형식 마스크를 사용하여 긴 정수 값을 텍스트 표현으로 변환합니다.

int rfmtlong(long lng_val, char *fmt, char *outbuf);

토토 베이 긴 값을 받습니다.lng_val, 형식 마스크fmt및 출력 버퍼에 대한 포인터outbuf. 형식 마스크에 따라 긴 값을 텍스트 표현으로 변환합니다.

형식 마스크는 문자를 지정하는 다음 형식으로 구성될 수 있습니다:

  • *(별표) - 이 위치가 비어 있으면 별표로 채우십시오.

  • &(앰퍼샌드) - 이 위치가 비어 있으면 0으로 채웁니다.

  • #- 선행 0을 공백으로 바꿉니다.

  • <- 문자열의 숫자를 왼쪽 정렬합니다.

  • ,(쉼표) - 4자리 이상의 숫자를 쉼표로 구분된 3자리 그룹으로 그룹화합니다.

  • .(마침표) - 이 문자는 숫자의 정수 부분과 소수 부분을 구분합니다.

  • -(빼기) - 숫자가 음수이면 빼기 기호가 나타납니다.

  • +(더하기) - 숫자가 양수 값이면 더하기 기호가 나타납니다.

  • (- 음수 앞의 빼기 기호를 대체합니다. 빼기 기호는 나타나지 않습니다.

  • )- 이 문자는 빼기를 대체하고 음수 값 뒤에 인쇄됩니다.

  • $- 통화 기호.

rupshift #

문자열을 대문자로 변환합니다.

void rupshift(char *str);

토토 베이 문자열에 대한 포인터를 수신하고 모든 소문자를 대문자로 변환합니다.

byleng #

후행 공백을 계산하지 않고 문자열의 문자 수를 반환합니다.

int byleng(char *str, int len);

토토 베이 첫 번째 인수로 고정 길이 문자열을 기대합니다 (str) 및 두 번째 인수로서의 길이(len). 유효 문자 수, 즉 후행 공백이 없는 문자열 길이를 반환합니다.

ldchar #

고정 길이 문자열을 Null 종료 문자열로 복사합니다.

void ldchar(char *src, int len, char *dest);

토토 베이 복사할 고정 길이 문자열을 받습니다(src), 길이(len) 및 대상 메모리에 대한 포인터(대상). 최소한 예약이 필요합니다.len+1문자열에 대한 바이트대상을 가리킵니다. 토토 베이 최대로 복사합니다.len바이트를 새 위치로 복사하고(소스 문자열에 후행 공백이 있는 경우에는 적음) null 종결자를 추가합니다.

rgetmsg #
int rgetmsg(int msgnum, char *s, int maxsize);

이 기능은 존재하지만 현재 구현되지 않았습니다!

rtyalign #
int rtypalign(int 오프셋, int 유형);

이 기능은 존재하지만 현재 구현되지 않았습니다!

rtypmsize #
int rtypmsize(int 유형, int len);

이 기능은 존재하지만 현재 구현되지 않았습니다!

rtyp폭 #
int rtypwidth(int sqltype, int sqllen);

이 기능은 존재하지만 현재 구현되지 않았습니다!

rsetnull #

변수를 NULL로 설정하세요.

int rsetnull(int t, char *ptr);

토토 베이 변수의 유형을 나타내는 정수와 C char* 포인터로 캐스팅된 변수 자체에 대한 포인터를 받습니다.

다음 유형이 존재합니다:

  • CCHARTYPE- 유형의 변수의 경우문자또는문자*

  • CSHORTTYPE- 유형의 변수의 경우짧은 정수

  • CINTTYPE- 변수 유형의 경우int

  • CBOOLTYPE- 변수 유형의 경우부울

  • CFLOATTYPE- 변수 유형의 경우플로트

  • CLONGTYPE- 변수 유형의 경우

  • CDOUBLETYPE- 변수 유형의 경우더블

  • CDECIMALTYPE- 변수 유형의 경우십진수

  • CDATETYPE- 변수 유형의 경우날짜

  • CDTIMETYPE- 유형의 변수의 경우타임스탬프

다음은 이 함수 호출의 예입니다:

$char c[] = "abc ";
$short s = 17;
$int i = -74874;

rsetnull(CCHARTYPE, (char *) c);
rsetnull(CSHORTTYPE, (char *) &s);
rsetnull(CINTTYPE, (char *) &i);
risnull #

변수가 NULL인지 테스트합니다.

int risnull(int t, char *ptr);

토토 베이 테스트할 변수의 유형을 받습니다 (t) 및 이 변수에 대한 포인터(ptr). 후자는 char*로 캐스팅되어야 합니다. 기능 보기rsetnull가능한 변수 유형 목록을 보려면.

다음은 이 기능을 사용하는 방법의 예입니다:

$char c[] = "abc ";
$short s = 17;
$int i = -74874;

risnull(CCHARTYPE, (char *) c);
risnull(CSHORTTYPE, (char *) &s);
risnull(CINTTYPE, (char *) &i);

34.15.5. 추가 상수#

여기에 있는 모든 상수는 오류를 설명하며 모두 음수 값을 나타내도록 정의되어 있습니다. 다양한 상수에 대한 설명에서 현재 구현에서 상수가 나타내는 값을 찾을 수도 있습니다. 그러나 이 숫자에 의존해서는 안 됩니다. 그러나 이들 모두가 음수 값을 나타내도록 정의되어 있다는 사실을 신뢰할 수 있습니다.

ECPG_INFORMIX_NUM_OVERFLOW #

계산에서 오버플로가 발생한 경우 함수는 이 값을 반환합니다. 내부적으로는 -1200으로 정의됩니다(인포믹스정의).

ECPG_INFORMIX_NUM_UNDERFLOW #

계산에서 언더플로가 발생한 경우 토토 베이 이 값을 반환합니다. 내부적으로는 -1201(인포믹스정의).

ECPG_INFORMIX_DIVIDE_ZERO #

0으로 나누려는 시도가 관찰되면 토토 베이 이 값을 반환합니다. 내부적으로는 -1202(인포믹스정의).

ECPG_INFORMIX_BAD_YEAR #

날짜를 구문 분석하는 동안 잘못된 연도 값이 발견된 경우 함수는 이 값을 반환합니다. 내부적으로는 -1204(인포믹스정의).

ECPG_INFORMIX_BAD_MONTH #

날짜를 구문 분석하는 동안 한 달 동안 잘못된 값이 발견된 경우 함수는 이 값을 반환합니다. 내부적으로는 -1205(인포믹스정의).

ECPG_INFORMIX_BAD_DAY #

날짜를 분석하는 동안 잘못된 날짜 값이 발견되면 함수는 이 값을 반환합니다. 내부적으로는 -1206(인포믹스정의).

ECPG_INFORMIX_ENOSHORTDATE #

분석 루틴에 짧은 날짜 표현이 필요하지만 올바른 길이의 날짜 문자열을 가져오지 못한 경우 함수는 이 값을 반환합니다. 내부적으로는 -1209(인포믹스정의).

ECPG_INFORMIX_DATE_CONVERT #

날짜 형식 지정 중 오류가 발생한 경우 함수는 이 값을 반환합니다. 내부적으로는 -1210(인포믹스정의).

ECPG_INFORMIX_OUT_OF_MEMORY #

토토 베이 작업 중 메모리가 고갈된 경우 이 값을 반환합니다. 내부적으로는 -1211(인포믹스정의).

ECPG_INFORMIX_ENOTDMY #

분석 루틴이 형식 마스크(예:mmddyy) 그러나 모든 필드가 올바르게 나열되지는 않았습니다. 내부적으로는 -1212(인포믹스정의).

ECPG_INFORMIX_BAD_NUMERIC #

분석 루틴이 오류가 포함되어 숫자 값에 대한 텍스트 표현을 구문 분석할 수 없거나 숫자 변수 중 하나 이상이 잘못되어 루틴이 숫자 변수와 관련된 계산을 완료할 수 없는 경우 함수는 이 값을 반환합니다. 내부적으로는 -1213(인포믹스정의).

ECPG_INFORMIX_BAD_EXPONENT #

분석 루틴이 지수를 분석할 수 없는 경우 토토 베이 이 값을 반환합니다. 내부적으로는 -1216(인포믹스정의).

ECPG_INFORMIX_BAD_DATE #

분석 루틴이 날짜를 분석할 수 없는 경우 함수는 이 값을 반환합니다. 내부적으로는 -1218(인포믹스정의).

ECPG_INFORMIX_EXTRA_CHARS #

분석 루틴에 분석할 수 없는 추가 문자가 전달되면 함수는 이 값을 반환합니다. 내부적으로는 -1264(인포믹스정의).

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.