| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 이전 | 젠 토토 : 문서 : 9.3 : ECPG- C에 포함 된 SQL | 33장.ECPG- 임베디드SQLC에서 | 다음 | |
ecpg소위에서 실행될 수 있습니다토토 베이 호환 모드. 이 모드라면 활성 상태인 경우 마치 활성 상태인 것처럼 동작하려고 합니다.인포믹스에 대한 사전 컴파일러인포믹스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등 그렇지 않으면 전처리기가 토큰을 호스트로 구문 분석합니다. 변수.
호환 모드에는 두 가지가 있습니다.토토 베이, 토토 베이_SE
이 호환 모드를 사용하는 프로그램을 연결할 때 기억하세요 링크 대상libcompat배송됨 ECPG로.
이전에 설명한 구문 설탕 외에,인포믹스호환성 모드 포트 데이터의 입력, 출력 및 변환을 위한 일부 기능도 제공됩니다. E/SQL에서 ECPG로 알려진 내장 SQL 문입니다.
인포믹스호환성 모드는 다음과 같습니다. ECPG의 pgtypeslib 라이브러리와 밀접하게 연결되어 있습니다. pgtypeslib SQL 데이터 유형을 C 호스트 프로그램 내의 데이터 유형에 매핑하고 대부분의 추가 기능은인포믹스호환성 모드를 사용하면 다음을 수행할 수 있습니다. 해당 C 호스트 프로그램 유형에서 작동합니다. 다만 그 정도는 참고하세요 호환성이 제한되어 있습니다. 복사를 시도하지 않습니다.인포믹스행동; 그것은 당신을 허용합니다 거의 동일한 작업을 수행하고 다음과 같은 기능을 제공합니다. 동일한 이름과 동일한 기본 동작을 가지지만 드롭인은 아닙니다. 사용 중인 경우 교체인포믹스현재. 더욱이, 일부 데이터 유형이 다릅니다. 예를 들어,PostgreSQL의datetime 및 간격 유형은 다음과 같습니다. 예를 들어 같은 범위에 대해 모릅니다.년 MINUTE따라서 ECPG에서도 이에 대한 지원을 찾을 수 없습니다.
저장을 위한 Informix 특수 "문자열" 의사 유형 이제 오른쪽으로 잘린 문자열 데이터가 다음에서 지원됩니다. 사용하지 않는 Informix 모드typedef. 에서 실제로 Informix 모드에서 ECPG는 다음과 같은 소스 파일 처리를 거부합니다. 포함typedef 일부 유형 문자열;
EXEC SQL 시작 선언 섹션; 문자열 사용자 ID; /* 이 변수에는 잘린 데이터가 포함됩니다 */ EXEC SQL END 선언 섹션; EXEC SQL FETCH MYCUR INTO :userid;
이 명령문은 현재 연결을 닫습니다. 사실, 이것은 ECPG의 동의어현재 연결 끊기:
$CLOSE 데이터베이스; /* 현재 연결을 끊는다 */ EXEC SQL 닫기 데이터베이스;
Informix와 ECPG 작동 방식의 차이로 인해 ESQL/C(즉, 어떤 단계가 순전히 문법 변환이고 어떤 단계가 기본 런타임 라이브러리에 의존하는지) 없음무료 커서_이름ECPG의 진술. 이 ECPG에서는,커서 선언그렇지 않습니다 다음을 수행하는 데 사용되는 런타임 라이브러리에 대한 함수 호출로 변환됩니다. 커서 이름. 이는 런타임 장부가 없음을 의미합니다. ECPG 런타임 라이브러리의 SQL 커서(PostgreSQL에만 해당) 서버.
무료 성명_이름는의 동의어입니다.DEALLOCATE PREPARE 명령문_이름.
토토 베이 호환 모드는 토토 베이 호환 모드와 다른 구조를 지원합니다. 하나는에 설명되어 있습니다.섹션 33.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;
전역 속성은 다음과 같습니다:
필드의 수SQLDA설명자.
필드별 속성에 대한 포인터.
미사용, 0바이트로 채워짐.
할당된 구조의 크기.
결과 세트에 다음이 포함된 경우 다음 SQLDA 구조에 대한 포인터 레코드가 두 개 이상입니다.
사용되지 않은 포인터, NULL이 포함되어 있습니다. 보관 Informix 호환성.
필드별 속성은 아래와 같습니다. 해당 속성은 다음에 저장됩니다.sqlvar배열:
필드 유형. 상수가 들어있습니다.sqltypes.h
필드 데이터의 길이.
필드 데이터에 대한 포인터. 포인터는 다음과 같습니다.문자 *유형, 그것이 가리키는 데이터는 바이너리에 있습니다 형식. 예:
int intval;
스위치(sqldata-sqlvar[i].sqltype)
사례 SQLINTEGER:
intval = *(int *)sqldata-sqlvar[i].sqldata;
부서지다;
...NULL 표시기를 가리키는 포인터입니다. DESCRIBE 또는 FETCH에 의해 반환된 경우 그러면 항상 유효한 포인터입니다. 에 대한 입력으로 사용되는 경우실행 ... sqlda를 사용하여;다음 NULL 포인터 값 이는 이 필드의 값이 NULL이 아님을 의미합니다. 그렇지 않으면 유효한 포인터와sqlitype제대로 되어야 합니다 설정합니다. 예:
if (*(int2 *)sqldata-sqlvar[i].sqlind != 0)
printf("값은 NULL입니다\n");필드 이름. 0으로 끝나는 문자열입니다.
Informix에 예약됨, 값PQfformat()필드용.
NULL 표시 데이터의 유형. 다음과 같은 경우에는 항상 SQLSMINT입니다. 서버에서 데이터를 반환합니다. 때SQLDA은 매개변수화된 쿼리에 사용되며 데이터는 집합 유형에 따라 처리됩니다.
NULL 표시 데이터의 길이.
필드의 확장 유형, 결과PQftype().
미사용.
다음과 같습니다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/인터페이스/ecpg/test/compat_informix/sqlda.pgc회귀 테스트.
십년십진수 유형 값 두 개를 추가합니다.
int decadd(십진수 *arg1, 십진수 *arg2, 십진수 *sum);
함수는 유형의 첫 번째 피연산자에 대한 포인터를 받습니다. 십진수(arg1), 두 번째 포인터 10진수 유형의 피연산자(arg2) 및 합계를 포함할 10진수 유형의 값에 대한 포인터 (합). 성공하면 함수는 0을 반환합니다.ECPG_토토 베이_NUM_OVERFLOW반환됨 오버플로의 경우 및ECPG_토토 베이_NUM_UNDERFLOW언더플로의 경우. -1 다른 실패에 대해서는 반환됩니다.errno각각으로 설정됨errno개 pgtypeslib.
decmp십진수 유형의 두 변수를 비교하십시오.
int deccmp(십진수 *arg1, 십진수 *arg2);
함수는 첫 번째 십진수 값에 대한 포인터를 받습니다. (arg1), 소수점 둘째 자리에 대한 포인터 값(arg2) 정수 값을 반환합니다. 이는 어느 것이 더 큰 값인지를 나타냅니다.
1, 값이 다음과 같은 경우arg1다음을 가리킵니다. 해당 값보다 큼var2포인트 에
-1, 값이 다음과 같은 경우arg1다음을 가리킵니다. 해당 값보다 작음arg2포인트 에
0, 해당 값이arg1다음을 가리키며 해당 값arg2점은 다음과 같습니다 같음
deccopy십진수 값을 복사하세요.
void deccopy(십진수 *src, 십진수 *target);
함수는 십진수 값에 대한 포인터를 받습니다. 첫 번째 인수로 복사됩니다(src) 및 10진수 유형의 대상 구조에 대한 포인터(대상)을 두 번째 인수로 사용합니다.
deccvascASCII 표현의 값을 십진수로 변환 유형.
int deccvasc(char *cp, int len, 십진수 *np);
함수는 다음을 포함하는 문자열에 대한 포인터를 받습니다. 변환할 숫자의 문자열 표현(cp) 및 길이len. np는 다음에 대한 포인터입니다. 연산 결과를 저장하는 10진수 값입니다.
유효한 형식은 예를 들면 다음과 같습니다:-2, .794, +3.44, 592.49E07또는-32.84e-4.
함수는 성공 시 0을 반환합니다. 오버플로 또는 언더플로인 경우 발생했습니다.ECPG_토토 베이_NUM_OVERFLOW또는ECPG_토토 베이_NUM_UNDERFLOW반환되었습니다. ASCII 표현을 구문 분석할 수 없는 경우,ECPG_토토 베이_BAD_NUMERIC반환되거나ECPG_토토 베이_BAD_EXPONENT이 문제가 발생한 경우 지수를 분석하는 동안.
deccvdblDouble 유형의 값을 10진수 유형의 값으로 변환합니다.
int deccvdbl(이중 dbl, 십진수 *np);
함수는 double 유형의 변수를 받습니다. 첫 번째 인수로 변환됩니다(dbl). 다음과 같이 두 번째 인수(np), 함수 해당 값을 보유해야 하는 10진수 변수에 대한 포인터를 받습니다. 작업 결과입니다.
함수는 성공 시 0을 반환하고 다음과 같은 경우 음수 값을 반환합니다. 변환에 실패했습니다.
decvintint 유형의 값을 10진수 유형의 값으로 변환합니다.
int deccvint(int in, 십진수 *np);
함수는 int 유형의 변수를 받습니다. 첫 번째 인수로 변환됩니다(에). 다음과 같이 두 번째 인수(np), 함수 해당 값을 보유해야 하는 10진수 변수에 대한 포인터를 받습니다. 작업 결과입니다.
함수는 성공 시 0을 반환하고 다음과 같은 경우 음수 값을 반환합니다. 변환에 실패했습니다.
deccvlonglong 유형의 값을 10진수 유형의 값으로 변환합니다.
int deccvlong(long lng, 십진수 *np);
함수는 다음과 같아야 하는 long 유형의 변수를 받습니다. 첫 번째 인수로 변환됩니다(lng). 다음과 같이 두 번째 인수(np), 함수 해당 값을 보유해야 하는 10진수 변수에 대한 포인터를 받습니다. 작업 결과입니다.
함수는 성공 시 0을 반환하고 다음과 같은 경우 음수 값을 반환합니다. 변환에 실패했습니다.
decdiv10진수 유형의 두 변수를 나눕니다.
int decdiv(십진수 *n1, 십진수 *n2, 십진수 *결과);
함수는 변수에 대한 포인터를 받습니다. 첫 번째 (n1) 및 두 번째(n2) 피연산자 및 계산n1/n2. 결과은(는) 보유해야 하는 변수에 대한 포인터입니다. 작업 결과입니다.
성공 시 0이 반환되고 나눗셈의 경우 음수 값이 반환됩니다. 실패합니다. 오버플로 또는 언더플로가 발생한 경우 함수는 다음을 반환합니다.ECPG_토토 베이_NUM_OVERFLOW또는ECPG_토토 베이_NUM_UNDERFLOW각각. 만약 0으로 나누려는 시도가 관찰되면 함수는 다음을 반환합니다.ECPG_토토 베이_DIVIDE_ZERO.
decmul십진수 두 값을 곱하세요.
int decmul(십진수 *n1, 십진수 *n2, 십진수 *결과);
함수는 변수에 대한 포인터를 받습니다. 첫 번째 (n1) 및 두 번째(n2) 피연산자 및 계산n1*n2. 결과는 다음을 보유해야 하는 변수에 대한 포인터입니다. 작업 결과입니다.
성공 시 0이 반환되며 다음과 같은 경우 음수 값이 반환됩니다. 곱셈이 실패합니다. 오버플로 또는 언더플로가 발생한 경우 함수 반환ECPG_토토 베이_NUM_OVERFLOW또는ECPG_토토 베이_NUM_UNDERFLOW각각.
decsub10진수 값에서 다른 값을 뺍니다.
int decsub(십진수 *n1, 십진수 *n2, 십진수 *결과);
함수는 변수에 대한 포인터를 받습니다. 첫 번째 (n1) 및 두 번째(n2) 피연산자 및 계산n1-n2. 결과는 다음을 보유해야 하는 변수에 대한 포인터입니다. 작업 결과입니다.
성공 시 0이 반환되며 다음과 같은 경우 음수 값이 반환됩니다. 빼기가 실패합니다. 오버플로 또는 언더플로가 발생한 경우 해당 기능은 반품ECPG_토토 베이_NUM_OVERFLOW또는ECPG_토토 베이_NUM_UNDERFLOW각각.
dectoasc10진수 유형의 변수를 ASCII 표현으로 변환 C char* 문자열로.
int dectoasc(decimal *np, char *cp, int len, int right)
함수는 10진수 유형의 변수에 대한 포인터를 받습니다. (np)를 텍스트로 변환합니다. 표현.cp버퍼는 작업 결과를 보유해야 합니다. 매개변수맞아요은 오른쪽의 자릿수를 지정합니다. 출력에는 소수점이 포함되어야 합니다. 결과는 다음과 같습니다 이 소수점 이하 자릿수로 반올림됩니다. 설정맞아요to -1은 사용 가능한 모든 십진수를 나타냅니다. 숫자가 출력에 포함되어야 합니다. 만약 길이가 출력 버퍼는 다음과 같이 표시됩니다.len다음을 포함한 텍스트 표현을 담기에 충분하지 않습니다. 후행 0바이트, 단일만*문자가 결과에 저장되고 -1이 반환됩니다.
함수는 버퍼인 경우 -1을 반환합니다.cp너무 작거나ECPG_토토 베이_OUT_OF_MEMORY기억이 있었다면 지쳤어.
dectodbl10진수 유형의 변수를 double로 변환합니다.
int dectodbl(십진수 *np, 이중 *dblp);
함수는 변환할 십진수 값에 대한 포인터를 받습니다. (np) 및 이중 변수에 대한 포인터 이는 작업 결과를 보유해야 합니다(dblp).
성공 시 0이 반환되고 변환이 이루어지면 음수 값이 반환됩니다. 실패했습니다.
디토인트10진수를 입력하는 변수를 정수로 변환합니다.
int dectoint(십진수 *np, int *ip);
함수는 변환할 십진수 값에 대한 포인터를 받습니다. (np) 및 정수 변수에 대한 포인터 이는 작업 결과를 보유해야 합니다(ip).
성공 시 0이 반환되고 변환이 이루어지면 음수 값이 반환됩니다. 실패했습니다. 오버플로가 발생한 경우,ECPG_토토 베이_NUM_OVERFLOW반환되었습니다.
ECPG 구현은 다음과 다릅니다.인포믹스구현.인포믹스정수를 다음 범위로 제한합니다. -32767 ~ 32767. ECPG 구현의 제한은 다음과 같습니다. 아키텍처에 대해 (-INT_MAX .. INT_MAX).
덱토롱10진수를 입력하는 변수를 긴 정수로 변환합니다.
int dectolong(십진수 *np, long *lngp);
함수는 변환할 십진수 값에 대한 포인터를 받습니다. (np) 및 긴 변수에 대한 포인터 이는 작업 결과를 보유해야 합니다(lngp).
성공 시 0이 반환되고 변환이 이루어지면 음수 값이 반환됩니다. 실패했습니다. 오버플로가 발생한 경우,ECPG_토토 베이_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_토토 베이_ENOSHORTDATE- 날짜 일, 월, 연도 사이에 구분 기호를 포함하지 않습니다. 이에 입력 문자열의 길이가 정확히 6 또는 8바이트여야 하지만 그렇지 않습니다.
ECPG_토토 베이_ENOTDMY- 형식 문자열이 연도의 순서를 올바르게 표시하지 않았습니다. 월과 일.
ECPG_토토 베이_BAD_DAY- 입력 문자열에 유효한 날짜가 포함되어 있지 않습니다.
ECPG_토토 베이_BAD_MONTH- 입력 문자열에 유효한 월이 포함되어 있지 않습니다.
ECPG_토토 베이_BAD_YEAR- 입력 문자열에 유효한 연도가 포함되어 있지 않습니다.
내부적으로 이 함수는 다음을 사용하도록 구현되었습니다.PGTYPESdate_defmt_asc함수. 참조
예제 입력 표는 여기를 참조하세요.
rfmtdate날짜 유형의 변수를 텍스트 표현으로 변환 형식 마스크를 사용합니다.
int rfmtdate(date d, char *fmt, char *str);
함수는 변환할 날짜를 받습니다 (d), 형식 마스크(fmt) 그리고 텍스트 표현을 담을 문자열 날짜(str).
성공 시 0이 반환되고 오류인 경우 음수 값이 반환됩니다. 발생했습니다.
내부적으로 이 함수는 다음을 사용합니다.PGTYPESdate_fmt_asc함수, 참조
예시는 여기를 참조하세요.
rmdyjul3개의 짧은 정수 배열에서 날짜 값을 생성합니다. 날짜의 일, 월, 연도를 지정하십시오.
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) 및 문자열 작업 결과를 보유합니다(출력). 변환합니다ts텍스트로 SQL 표준에 따른 표현입니다.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함수. 참조
마스크 지정자가 어떤 형식을 사용할 수 있는지에 대한 정보는 여기를 참조하세요.
사용할 수 있습니다.
intoasc간격 변수를 C char* 문자열로 변환합니다.
int intoasc(간격 *i, char *str);
함수는 간격 변수에 대한 포인터를 수신합니다. 변환 (i) 및 다음과 같은 문자열이 필요합니다. 작업 결과를 보유합니다(str). 그것 개종자i텍스트 표현으로 SQL 표준에 따르면 다음과 같습니다.YYYY-MM-DD HH:MM:SS.
성공하면 함수는 0을 반환하고 다음과 같은 경우 음수 값을 반환합니다. 오류가 발생했습니다.
rfmtlong다음을 사용하여 긴 정수 값을 텍스트 표현으로 변환합니다. 형식 마스크.
int rfmtlong(long lng_val, char *fmt, char *outbuf);
함수는 긴 값을 받습니다.lng_val, 형식 마스크fmt및 출력 버퍼에 대한 포인터아웃버프. Long 값을 다음에 따라 변환합니다. 마스크를 텍스트 표현으로 포맷합니다.
형식 마스크는 다음 형식으로 구성될 수 있습니다 문자 지정:
*(별표) - 이 위치가 비어 있으면 별표로 채우세요.
&(앰퍼샌드) - 이 위치인 경우 그렇지 않으면 비어 있으므로 0으로 채우십시오.
#- 선행 0을 다음으로 바꿉니다. 공백.
<- 숫자를 왼쪽 정렬합니다. 문자열.
,(쉼표) - 4개의 그룹 번호 또는 더 많은 숫자를 쉼표로 구분된 세 자리 그룹으로 나눕니다.
.(마침표) - 이 문자는 구분합니다. 분수 부분에서 숫자의 정수 부분.
-(마이너스) - 다음과 같은 경우 빼기 기호가 나타납니다. 숫자가 음수 값입니다.
+(더하기) - 다음과 같은 경우 더하기 기호가 나타납니다. 숫자는 양수 값입니다.
(- 마이너스 로그인을 대체합니다. 음수 앞. 빼기 기호는 나타나지 않습니다.
)- 이 문자는 마이너스를 대체합니다. 음수 값 뒤에 인쇄됩니다.
$- 통화 기호.
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바이트를 새 위치로 이동(이하 소스 문자열에 뒤에 공백이 있는 경우) 널 종결자.
rgetmsgint rgetmsg(int msgnum, char *s, int maxsize);
이 기능은 존재하지만 현재 구현되지 않았습니다!
rtyalignint rtypalign(int 오프셋, int 유형);
이 기능은 존재하지만 현재 구현되지 않았습니다!
rtypmsizeint 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);
여기의 모든 상수는 오류를 나타내며 모두 오류를 나타냅니다. 음수 값을 나타내도록 정의되었습니다. 설명에는 다른 상수를 사용하면 상수의 값도 찾을 수 있습니다. 현재 구현에서 표현됩니다. 그러나 당신은해서는 안됩니다 이 숫자에 의존하세요. 그러나 당신은 그들 모두가 사실에 의존할 수 있습니다 음수 값을 나타내도록 정의되었습니다.
함수는 오버플로가 발생한 경우 이 값을 반환합니다. 계산. 내부적으로는 -1200으로 정의됩니다(인포믹스정의).
함수는 언더플로가 발생한 경우 이 값을 반환합니다. 계산. 내부적으로는 -1201(인포믹스정의).
0으로 나누려는 시도가 다음과 같은 경우 함수는 이 값을 반환합니다. 관찰됨. 내부적으로는 -1202(인포믹스정의).
연도 동안 잘못된 값이 발견되면 함수는 이 값을 반환합니다. 날짜를 파싱하는 동안. 내부적으로는 -1204(인포믹스정의).
한 달 동안 잘못된 값이 발견되면 함수는 이 값을 반환합니다. 날짜를 파싱하는 동안. 내부적으로는 -1205(인포믹스정의).
일일에 잘못된 값이 발견되면 함수는 이 값을 반환합니다. 날짜를 파싱하는 동안. 내부적으로는 -1206(인포믹스정의).
분석 루틴에 짧은 값이 필요한 경우 함수는 이 값을 반환합니다. 날짜를 표현했지만 오른쪽에 날짜 문자열을 가져오지 못했습니다. 길이. 내부적으로는 -1209(인포믹스정의).
날짜 동안 오류가 발생한 경우 함수는 이 값을 반환합니다. 서식 지정. 내부적으로는 -1210(인포믹스정의).
함수는 실행 중 메모리가 고갈된 경우 이 값을 반환합니다. 운영. 내부적으로는 -1211(인포믹스정의).
분석 루틴이 예상되는 경우 함수는 이 값을 반환합니다. 형식 마스크를 얻습니다(예:mmddyy) 하지만 그렇지 않음 모든 필드가 올바르게 나열되었습니다. 내부적으로는 -1212로 정의됩니다. (그인포믹스정의).
분석 루틴이 수행할 수 없는 경우 함수는 이 값을 반환합니다. 숫자 값에 대한 텍스트 표현을 구문 분석합니다. 오류가 있거나 루틴이 계산을 완료할 수 없는 경우 숫자 변수 중 적어도 하나가 숫자 변수와 관련되어 있기 때문에 변수가 잘못되었습니다. 내부적으로는 -1213(인포믹스정의).
분석 루틴이 구문 분석할 수 없는 경우 함수는 이 값을 반환합니다. 지수. 내부적으로는 -1216(인포믹스정의).
분석 루틴이 구문 분석할 수 없는 경우 함수는 이 값을 반환합니다. 날짜. 내부적으로는 -1218(인포믹스정의).
분석 루틴이 추가로 전달되면 함수는 이 값을 반환합니다. 구문 분석할 수 없는 문자입니다. 내부적으로는 -1264(인포믹스정의).