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에서도 그에 대한 지원을 찾을 수 없습니다.
오른쪽으로 잘린 문자열 데이터를 저장하기 위한 Informix 특수 "문자열" 의사 유형은 이제 Informix 모드에서 사용하지 않고 지원됩니다.typedef. 실제로 Informix 모드에서 ECPG는 다음을 포함하는 소스 파일 처리를 거부합니다.typedef 일부 유형 문자열;
EXEC SQL 시작 선언 섹션; 문자열 사용자 ID; /* 이 변수에는 잘린 데이터가 포함됩니다 */ EXEC SQL END 선언 섹션; EXEC SQL FETCH MYCUR INTO :userid;
데이터베이스 닫기 #이 명령문은 현재 연결을 닫습니다. 사실 이것은 ECPG의 동의어이다.현재 연결 끊기:
$CLOSE 데이터베이스; /* 현재 연결을 끊는다 */ EXEC SQL 닫기 데이터베이스;
무료 커서_이름 #Informix의 ESQL/C와 ECPG 작동 방식의 차이로 인해(즉, 순전히 문법 변환 단계와 기본 런타임 라이브러리에 의존하는 단계) 차이가 없습니다.무료 커서_이름ECPG의 진술. 이는 ECPG에서,커서 선언커서 이름을 사용하는 런타임 라이브러리에 대한 함수 호출로 변환되지 않습니다. 즉, ECPG 런타임 라이브러리에는 SQL 커서의 런타임 기록이 없고 PostgreSQL 서버에서만 기록됩니다.
무료 성명_이름 #무료 성명_이름은의 동의어입니다.DEALLOCATE PREPARE 명령문_이름.
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;
전역 속성은 다음과 같습니다:
필드별 속성은 아래와 같습니다. 해당 속성은 다음에 저장됩니다.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.
sqltypenamesqltypelensqlownerlensqlsourcetypesqlownernamesqlsourceidsqlflagssqlreserved #미사용.
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회귀 테스트.
십년 #두 개의 십진수 유형 값을 추가합니다.
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);
여기에 있는 모든 상수는 오류를 설명하며 모두 음수 값을 나타내도록 정의되어 있습니다. 다양한 상수에 대한 설명에서 현재 구현에서 상수가 나타내는 값을 찾을 수도 있습니다. 그러나 이 숫자에 의존해서는 안 됩니다. 그러나 이들 모두가 음수 값을 나타내도록 정의되어 있다는 사실을 신뢰할 수 있습니다.
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(인포믹스정의).
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.