34.15. Informix호환성 모드#

ECPG소위에서 실행할 수 있습니다Informix 호환성 모드. 이 모드가 활성화되면 마치 마치처럼 행동하려고합니다.Informix프리 컴파일러Informixe/sql. 일반적으로 말하면 이것은 대신 달러 표시를 사용할 수 있습니다.Exec SQL임베디드 SQL 명령을 소개하기위한 원시 :

$ int j = 3;
$ 연결 : dbname;
$ 작성 테이블 테스트 (I int 기본 키, j int);
$ test에 삽입 (i, j) 값 (7, : j);
$ commit;

note

$및 다음 전처리 지침, 즉포함, 정의, ifdef등. 그렇지 않으면, 사전 처리기는 토큰을 호스트 변수로 구문 분석합니다.

두 가지 호환 모드가 있습니다 :Informix, informix_se

이 호환성 모드를 사용하는 프로그램을 연결할 때libcompatECPG와 함께 배송됩니다.

이전에 설명 된 구문 설탕 외에도Informix호환성 모드는 데이터의 입력, 출력 및 변환에 대한 일부 기능뿐만 아니라 E/SQL에서 ECPG로 알려진 임베디드 SQL 문을 포장합니다.

Informix호환성 모드는 ECPG의 PGTYPESLIB 라이브러리에 밀접하게 연결되어 있습니다. pgtypeslib는 SQL 데이터 유형을 C 호스트 프로그램 내의 데이터 유형에 매핑하고 대부분의 추가 기능Informix호환성 모드를 사용하면 해당 C 호스트 프로그램 유형에서 작동 할 수 있습니다. 그러나 호환성의 범위는 제한되어 있습니다. 복사하려고하지 않습니다Informix행동; 그것은 당신이 동일한 작업을 다소 수행 할 수 있으며 동일한 이름과 동일한 기본 동작을 가진 기능을 제공하지만 사용중인 경우 드롭 인 교체품이 아닙니다.Informix현재. 또한 일부 데이터 유형은 다릅니다. 예를 들어,PostgreSQL의 DateTime 및 간격 유형은 예를 들어 범위에 대해 알지 못합니다연도 ~ 분따라서 ECPG에서도 지원하지 않을 것입니다.

34.15.1. 추가 유형#

오른쪽 트림 문자열 데이터를 저장하기위한 Informix- special "string"의사 유형은 이제 사용하지 않고 Informix-Mode에서 지원됩니다.typedef. 실제로 Informix-Mode에서 ECPG는 포함 된 소스 파일을 처리하는 것을 거부합니다.typedef somegype String;

Exec SQL 시작 선언 섹션;
문자열 userID; / *이 변수에는 트림 데이터가 포함됩니다 */
Exec SQL END DELLARE SECTION;

exec SQL Mycur에 : userId;

34.15.2. 추가/누락 된 임베디드 SQL 문#

닫기 데이터베이스 #

이 문장은 현재 연결을 닫습니다. 사실, 이것은 ECPG의 동의어입니다현재 분리:

$ 닫기 데이터베이스;                / * 현재 연결을 닫습니다 */
Exec SQL Close Database;
무료 cursor_name #

ECPG의 차이로 인해 Informix의 ESQL/C (즉, 순수한 문법 변환이며 어떤 단계가 기본 런타임 라이브러리에 의존하는 단계) 없음무료 cursor_nameECPG의 진술. ECPG에서이기 때문입니다.선언 커서커서 이름에 사용하는 런타임 라이브러리로 함수 호출로 변환되지 않습니다. 이것은 ECPG 런타임 라이브러리에서 SQL 커서의 런타임 부기가 없음을 의미합니다.

무료 statement_name #

무료 statement_name동의어입니다Deallocate Repact statement_name.

34.15.3. 정보 호환 SQLDA 디스크립터 영역#

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

struct sqlvar_compat

    짧은 sqltype;
    int sqllen;
    char *sqldata;
    짧은 *sqlind;
    char *sqlname;
    char *sqlformat;
    짧은 sqlitype;
    짧은 sqlilen;
    char *sqlidata;
    int sqlxid;
    char *sqltypename;
    짧은 sqltypelen;
    짧은 sqlownerlen;
    짧은 sqlsourceType;
    char *sqlownername;
    int sqlsourceid;
    char *sqlilongdata;
    int sqlflags;
    void *sqlreserved;
;

struct sqlda_compat

    짧은 SQLD;
    struct sqlvar_compat *sqlvar;
    char desc_name [19];
    짧은 desc_occ;
    struct sqlda_compat *desc_next;
    void *예약;
;

typedef struct sqlvar_compat sqlvar_t;
typedef struct sqlda_compat sqlda_t;

글로벌 속성은 다음과 같습니다.

SQLD #

의 필드 수SQLDA디스크립터.

sqlvar #

필드 당 특성에 대한 포인터.

desc_name #

사용하지 않고 제로 바이트로 채워져 있습니다.

18620_18630 #

할당 된 구조의 크기.

desc_next #

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

예약 #

미사용 포인터, NULL을 포함합니다. 정보 호환성을 위해 보관합니다.

당사자 속성은 아래에 있으며에 저장됩니다.sqlvar배열 :

sqltype #

필드의 유형. 상수가sqltypes.h

Sqllen #

필드 데이터의 길이.

sqldata #

필드 데이터에 대한 포인터. 포인터는char *타입, 이에 의해 지적 된 데이터는 이진 형식입니다. 예:

int intval;

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

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

널 표시기에 대한 포인터. 설명 또는 페치로 반환하면 항상 유효한 포인터입니다. 입력으로 사용 된 경우실행 ... SQLDA 사용;그런 다음 NULL-POINTER 값은이 필드의 값이 NULL임을 의미합니다. 그렇지 않으면 유효한 포인터 및sqlitype올바르게 설정해야합니다. 예:

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

필드 이름. 0- 종료 문자열.

sqlformat #

Informix에 예약, 값pqfformat필드 용.

sqlitype #

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

sqlilen #

널 표시기 데이터의 길이.

SQLXID #

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

sqltypename
sqltypelen
sqlownerlen
sqlsourcetype
sqlownername
SQLSOURCEID
sqlflags
sqlreserved #

미사용.

sqlilongdata #

SQLDATAifsqllen32KB보다 큽니다.

예 :

exec sql 포함 sqlda.h;

    sqlda_t *sqlda; / * 이것은 내장 선언 섹션 아래에있을 필요가 없습니다 */

    Exec SQL 시작 선언 섹션;
    char * prep_stmt = "select * from table1";
    int i;
    Exec SQL END DELLARE SECTION;

    ...

    Exec SQL 준비 mystmt : prep_stmt;

    Exec SQL MystMt를 SQLDA로 설명합니다.

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

    Exec SQL Mystmt에 대한 MyCursor 커서 선언;
    Exec SQL Open MyCursor;
    exec SQL을 찾을 수 없을 때마다;

    동안 (1)

      SQLDA를 사용하여 Exec SQL Fetch MyCursor;

    Exec SQL Close MyCursor;

    자유 (SQLDA); /* 주요 구조는 모두 무료입니다 ()
                  * sqlda 및 sqlda- sqlvar는 할당 된 영역에 있습니다 */

자세한 내용은를 참조하십시오.sqlda.h헤더 및src/interfaces/ecpg/test/compat_informix/sqlda.pgc회귀 테스트.

34.15.4. 추가 기능#

Decadd #

두 가지 소수점 유형 값 추가.

int decadd (소수 *arg1, 소수 *arg2, 소수 *합);

토토 베이 십진수 유형의 첫 번째 피연산자에 대한 포인터를 수신합니다 (arg1), 유형의 두 번째 피연산자에 대한 포인터 (arg2) 및 sum ( 유형 10 진수 값에 대한 포인터Sum). 성공시 토토 베이 0을 반환합니다.ecpg_informix_num_overflow오버플로의 경우 반환됩니다.ecpg_informix_num_underflow언더 플로우의 경우. -1은 다른 실패로 반환되고errno각각으로 설정되었습니다errnopgtypeslib의 수

deccmp #

십진 유형의 두 변수 비교

int deccmp (Decimal *arg1, Decimal *arg2);

토토 베이 첫 번째 소수점 값에 대한 포인터를 수신합니다 (arg1), 두 번째 소수점 값에 대한 포인터 (arg2) 그리고 어느 것이 더 큰 값인지를 나타내는 정수 값을 반환합니다.

  • 1, 값이라면arg1포인트가 값보다 큽니다var2포인트

  • -1, 값인 경우arg1포인트로 포인트 값보다 작습니다arg2포인트

  • 0, 값인 경우arg1포인트 및 가치arg2

Deccopy #

소수점 값 복사.

void deccopy (소수 *src, 소수 *대상);

이 토토 베이 첫 번째 인수로 복사 해야하는 소수점 값에 대한 포인터를받습니다 (SRC) 및 유형 10 진수의 대상 구조에 대한 포인터 (대상) 두 번째 인수로.

deccvasc #

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

int deccvasc (char *cp, int len, decimal *np);

함수는 변환 할 숫자의 문자열 표현을 포함하는 문자열에 대한 포인터를 수신합니다 (CP)와 길이Len. NP| 작전 결과를 절약하는 소수점 값에 대한 포인터입니다.

유효한 형식은 예를 들어 :-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 #

유형 값을 두 배의 값을 유형의 값으로 변환합니다.

int deccvdbl (Double DBl, Decimal *np);

토토 베이 첫 번째 인수로 변환 해야하는 유형의 변수를 수신합니다 (dbl). 두 번째 인수로서 (NP), 토토 베이 작업 결과를 유지 해야하는 소수 변수에 대한 포인터를 수신합니다.

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

deccvint #

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

int deccvint (int in, decimal *np);

토토 베이 첫 번째 인수로 변환 해야하는 유형 int의 변수를 수신합니다 (in). 두 번째 인수로서 (NP),이 토토 베이 작업 결과를 유지 해야하는 소수 변수에 대한 포인터를 수신합니다.

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

deccvlong #

유형의 값을 유형의 값으로 변환하십시오.

int deccvlong (Long Lng, Decimal *np);

이 토토 베이 첫 번째 인수로 변환 해야하는 Long의 유형 변수를 수신합니다 (LNG). 두 번째 인수로서 (NP),이 토토 베이 작업 결과를 유지 해야하는 소수 변수에 대한 포인터를 수신합니다.

토토 베이 성공시 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 #

CHAR* 문자열에서 ASCII 표현으로 소수점의 변수를 변환합니다.

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

토토 베이 유형의 변수에 대한 포인터를 수신합니다 (NP) 텍스트 표현으로 변환됩니다.CP는 작업 결과를 유지 해야하는 버퍼입니다. 매개 변수오른쪽소수점의 오른쪽 오른쪽 수는 출력에 포함되어야합니다. 결과는이 소수점 자리로 반올림됩니다. 환경오른쪽~ -1은 사용 가능한 모든 소수 자릿수가 출력에 포함되어야 함을 나타냅니다. 출력 버퍼의 길이 인 경우Len후행 제로 바이트를 포함하여 텍스트 표현을 보유하기에 충분하지 않습니다.*문자는 결과에 저장되고 -1이 반환됩니다.

토토 베이 버퍼 인 경우 -1 중 하나를 반환합니다CP너무 작거나ecpg_informix_out_of_memory메모리가 소진 된 경우.

dectodbl #

십진수 유형 변수를 이중으로 변환합니다.

int dectodbl (Decimal *np, double *dblp);

토토 베이 변환하기 위해 십진 값에 대한 포인터를 수신합니다 (NP) 및 작업 결과를 유지 해야하는 이중 변수에 대한 포인터 (DBLP).

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

dectoint #

십진수의 변수를 정수로 변환합니다.

int dectoint (Decimal *np, int *ip);

토토 베이 변환하기 위해 십진 값에 대한 포인터를 수신합니다 (NP) 및 작업 결과를 유지 해야하는 정수 변수에 대한 포인터 (IP).

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

ECPG 구현은와 다릅니다.Informix구현.Informix정수를 -32767에서 32767로 범위로 제한하는 반면 ECPG 구현의 한계는 아키텍처 (에 따라 다릅니다.int_min .. int_max).

dectolong #

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

int dectolong (Decimal *np, long *lngp);

토토 베이 변환 할 소수 값에 대한 포인터를 수신합니다 (NP) 및 작업 결과를 유지 해야하는 긴 변수에 대한 포인터 (LNGP).

성공시 0이 반환되고 변환이 실패하면 음수 값이 반환됩니다. 오버플로가 발생하면ecpg_informix_num_overflow반품.

ECPG 구현은와 다릅니다.Informix구현.Informix긴 정수를 -2,147,483,647 ~ 2,147,483,647에서 2,147,483,647로 제한하는 반면 ECPG 구현의 한계는 아키텍처에 따라 다릅니다 (-long_max .. long_max).

rdatest #

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

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

토토 베이 두 개의 인수를 받고, 첫 번째 인수는 convert (의 날짜입니다.d) 그리고 두 번째는 대상 문자열에 대한 포인터입니다. 출력 형식은 항상yyyy-mm-dd이므로 문자열에 대해 최소 11 바이트 (제로 바이트 터미네이터 포함)를 할당해야합니다.

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

ECPG의 구현은와 다릅니다.Informix구현. 안에Informix형식은 환경 변수를 설정하여 영향을받을 수 있습니다. 그러나 ECPG에서는 출력 형식을 변경할 수 없습니다.

rstrdate #

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

int rstrdate (char *str, date *d);

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

토토 베이와 동일한 값을 반환합니다.rdefmtdate.

rtoday #

현재 날짜 받기.

void rtoday (날짜 *d);

토토 베이 날짜 변수에 대한 포인터를 수신합니다 (d) 현재 날짜로 설정된 것입니다.

내부적 으로이 토토 베이를 사용합니다.pgtypesdate_today기능.

rjulmdy #

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

int rjulmdy (날짜 d, 짧은 mdy [3]);

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

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

내부적으로 토토 베이를 사용합니다.pgtypesdate_julmdy기능.

rdefmtdate #

형식 마스크를 사용하여 문자열을 유형 날짜 값으로 변환합니다.

int rdefmtdate (날짜 *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 (날짜 d, char *fmt, char *str);

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

47152_47222

내부적 으로이 토토 베이를 사용합니다.pgtypesdate_fmt_asc함수, 예제는 참조를 참조하십시오.

rmdyjul #

날짜, 달 및 날짜를 ​​지정하는 3 개의 짧은 정수 배열에서 날짜 값을 만듭니다.

int rmdyjul (짧은 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, timestamp *ts);

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

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

내부적 으로이 토토 베이를 사용합니다.pgtypestimestamp_from_asc함수. 예제 입력이있는 테이블에 대한 참조를 참조하십시오.

dtcvfmtasc #

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

dtcvfmtasc (char *inbuf, char *fmtstr, timestamp *dtvalue)

토토 베이 문자열을 구문 분석합니다 (Inbuf), 사용하는 형식 마스크 (FMTSTR) 및 작업 결과를 유지 해야하는 타임 스탬프 변수에 대한 포인터 (dtValue).

이 토토 베이를 통해 구현됩니다.pgtypestimestamp_defmt_asc함수. 사용할 수있는 형식 지정자 목록은 문서를 참조하십시오.

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

dtsub #

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

int dtsub (timestamp *ts1, timestamp *ts2, interval *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 char로 변환합니다.

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

이 토토 베이 첫 번째 인수로 변환하기 위해 타임 스탬프에 대한 포인터를 수신합니다 (TS), 출력 버퍼에 대한 포인터 (출력), 출력 버퍼에 할당 된 최대 길이 (str_len) 및 변환에 사용할 형식 마스크 (FMTSTR).

성공시, 오류가 발생하면 함수가 0과 음수 값을 반환합니다.

내부적 으로이 토토 베이를 사용합니다.pgtypestimestamp_fmt_asc함수. 어떤 형식 마스크 지정자를 사용할 수 있는지에 대한 정보는 참조를 참조하십시오.

in andASC #

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

int interasc (Interval *i, char *str);

토토 베이 convert ( 간격 변수에 대한 포인터를 수신합니다.i) 및 작업 결과를 유지 해야하는 문자열 (str). 그것은 변환iSQL 표준에 따른 텍스트 표현, 즉yyyy-mm-dd hh : mm : ss.

성공시, 오류가 발생하면 함수가 0과 음수 값을 반환합니다.

rfmtlong #

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

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

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

형식 마스크는 다음 형식으로 구성 될 수 있습니다.

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

  • &(Ampersand) -이 위치가 비워지면 0으로 채우십시오.

  • #- 이끄는 제로를 공란으로 돌립니다.

  • <- 문자열의 숫자를 좌회전합니다.

  • ,(Comma) - 쉼표로 분리 된 3 자리 숫자 그룹에 4 자리 이상의 그룹 번호.

  • .(기간) -이 문자는 숫자의 전체 수 부분을 분수 부분에서 분리합니다.

  • -(마이너스) - 숫자가 음수 인 경우 마이너스 부호가 나타납니다.

  • +(플러스) - 숫자가 양수 값이면 플러스 부호가 나타납니다.

  • (- 음수 앞의 마이너스 부호를 대체합니다. 마이너스 부호가 나타나지 않습니다.

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

  • $- 통화 기호.

Rupshift #

문자열을 대문자로 변환하십시오.

void rupshift (char *str);

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

byleng #

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

int byleng (char *str, int len);

이 토토 베이 고정 길이 문자열이 첫 번째 인수 (로 기대합니다.str) 두 번째 인수로서의 길이 (Len). 그것은 유효 문자의 수, 즉 후행 블랭크가없는 줄의 길이를 반환합니다.

LDCHAR #

고정 길이 문자열을 널리 터진 문자열로 복사하십시오.

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

토토 베이 복사 할 고정 길이 문자열을 수신합니다 (SRC), 길이 (Len) 및 대상 메모리에 대한 포인터 (dest). 적어도 예약해야합니다Len+1문자열의 바이트dest토토 베이 최대 복사Len새 위치에 바이트 (소스 문자열에 후행 블랭크가있는 경우 적음) 및 Null-Terminator를 추가합니다.

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

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

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

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

rtypmsize #
int rtypmsize (int type, int len);

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

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

이 함수는 존재하지만 현재 구현되지 않았습니다!

RSETNULL #

변수를 null로 설정합니다.

int rsetnull (int t, char *ptr);

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

다음 유형이 있습니다 :

  • CCHARTYPE- 유형 변수char또는char*

  • cshorttype- 유형 변수의 경우짧은 int

  • Cinttype- 유형 변수의 경우int

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

  • cfloattype- 유형 변수의 경우float

  • ClongType- 유형 변수의 경우Long

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

  • CDECIMATTEPE- 유형 변수의 경우Decimal

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

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

이 기능에 대한 호출의 예는 다음과 같습니다.

$ char c [] = "abc";
$ 짧은 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). 후자는 숯*에 캐스트되어야한다는 점에 유의하십시오. 함수보기RSETNULL가능한 변수 유형 목록의 경우

이 기능을 사용하는 방법의 예는 다음과 같습니다.

$ char c [] = "abc";
$ 짧은 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으로 정의됩니다 (Informix정의).

ecpg_informix_num_underflow #

함수 계산에서 언더 플로가 발생하면이 값을 반환합니다. 내부적으로 -1201 (로 정의됩니다.Informix정의).

ecpg_informix_divide_zero #

함수는 0으로 나누려는 시도가 관찰되면이 값을 반환합니다. 내부적으로 -1202로 정의됩니다 (Informix정의).

ecpg_informix_bad_year #

함수는 날짜를 구문 분석하는 동안 1 년 동안 나쁜 값이 발견되면이 값을 반환합니다. 내부적으로 -1204로 정의됩니다 (Informix정의).

ecpg_informix_bad_month #

함수는 날짜를 구문 분석하는 동안 한 달의 나쁜 값이 발견되면이 값을 반환합니다. 내부적으로 -1205로 정의됩니다 (Informix정의).

ecpg_informix_bad_day #

함수 날짜를 구문 분석하는 동안 하루의 나쁜 값이 발견되면이 값을 반환합니다. 내부적으로 -1206으로 정의됩니다 (Informix정의).

ECPG_INFORMIX_ENOSHORTDATE #

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

ecpg_informix_date_convert #

함수 날짜 서식 중에 오류가 발생한 경우이 값을 반환합니다. 내부적으로 -1210으로 정의됩니다 (Informix정의).

ecpg_informix_out_of_memory #

함수는 작동 중에 메모리가 소진 된 경우이 값을 반환합니다. 내부적으로 -1211 (로 정의됩니다.Informix정의).

ecpg_informix_enotdmy #

토토 베이 구문 분석 루틴이 형식 마스크를 가져와야하는 경우이 값을 반환합니다 (좋아요mmddyy) 그러나 모든 필드가 올바르게 나열된 것은 아닙니다. 내부적으로 -1212로 정의됩니다 (Informix정의).

ecpg_informix_bad_numeric #

함수는 오류가 포함되어 있으므로 숫자 값에 대한 텍스트 표현을 구문 분석 할 수 없거나 숫자 변수와 관련된 계산을 완료 할 수 없기 때문에 숫자 값에 대한 텍스트 표현을 구문 분석 할 수없는 경우이 값을 반환합니다. 내부적으로 -1213 (로 정의됩니다.Informix정의).

ecpg_informix_bad_exponent #

함수는 구문 분석 루틴이 지수를 구문 분석 할 수없는 경우이 값을 반환합니다. 내부적으로 -1216 (로 정의됩니다.Informix정의).

ecpg_informix_bad_date #

함수 파싱 루틴이 날짜를 구문 분석 할 수없는 경우이 값을 반환합니다. 내부적으로 -1218 (로 정의됩니다.Informix정의).

ecpg_informix_extra_chars #

함수는 구문 분석 루틴이 추가 문자로 전달되면이 값을 반환합니다. 내부적으로 -1264로 정의됩니다 (Informix정의).

수정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면