Postgresql 9.1.24 문서 | ||||
---|---|---|---|---|
Postgre사설 토토 사이트 : 문서 : 9.1 : 실행 실행 | 토토 : 문서 : 9.1 : ECPG- C에 포함 된 메이저 토토 사이트 | 33 장ECPG- 임베디드Postgre스포츠in c | 다음 |
inPostgre사설 토토 사이트 : 문서 : 9.1 : 실행 실행당신은 방법을 보았습니다 임베디드 메이저 토토 사이트 프로그램에서 메이저 토토 사이트 문을 실행할 수 있습니다. 일부 해당 진술 중 고정 값 만 사용했으며 사용자가 제공 한 값을 명령문에 삽입하거나 프로그램 프로세스 쿼리에 의해 리턴 된 값. 그런 종류 진술은 실제 응용 프로그램에서 실제로 유용하지 않습니다. 이것 섹션은 C 사이에 데이터를 전달할 수있는 방법에 대해 자세히 설명합니다. 간단한 메커니즘을 사용한 프로그램 및 임베디드 메이저 토토 사이트 문 라고 불리는호메이저 토토 사이트 변수. 임베디드에서 메이저 토토 사이트 프로그램 우리는 메이저 토토 사이트 문을 고려합니다손님C 프로그램 코드에서호메이저 토토 사이트 언어. 따라서 변수 C 프로그램 중호메이저 토토 사이트 변수.
Postgre메이저 토토 사이트 백엔드 사이의 값을 교환하는 또 다른 방법 ECPG 응용 프로그램은에 설명 된 메이저 토토 사이트 디스크립터의 사용입니다.토토 43_112.
C 프로그램과 메이저 토토 사이트 문 사이의 데이터 전달은 다음과 같습니다. 임베디드 메이저 토토 사이트에서 특히 간단합니다. 대신 프로그램을 수반하는 진술에 데이터를 붙여 넣습니다 가치를 올바르게 인용하는 것과 같은 다양한 합병증 단순히 C 변수의 이름을 메이저 토토 사이트에 쓸 수 있습니다. 결장에 의해 접두사 인 진술. 예를 들어:
Exec 메이저 토토 사이트 insert initeable 값 (: v1, 'foo', : v2);
이 진술은 이름라는 두 개의 c 변수를 나타냅니다.v1andv2당신이 한 종류의 데이터 또는 다른 데이터를 사용하도록 제한됩니다.
메이저 토토 사이트 문에 C 변수를 삽입하는이 스타일 메이저 토토 사이트에서 값 표현이 예상되는 곳 성명.
예를 들어 프로그램에서 데이터를 데이터베이스로 전달하려면 쿼리의 매개 변수로 또는 데이터베이스에서 데이터를 전달합니다. 프로그램으로 돌아가서 의도 된 C 변수 이 데이터를 포함하여 특별히 표시된 것으로 선언해야합니다. 섹션, 그래서 내장 된 메이저 토토 사이트 사전 처리기는 그들을.
이 섹션은 :부터 시작합니다.
Exec 메이저 토토 사이트 시작 선언 섹션;
exec 메이저 토토 사이트 종료 선언 섹션;
해당 라인 사이에 일반 C 변수가 있어야합니다 다음과 같은 선언
int x = 4; Char Foo [16], Bar [16];
보시다시피, 초기 값을 선택적으로 할당 할 수 있습니다. 변수에. 변수의 범위는 프로그램 내에서 선언 섹션의 위치. 당신은 할 수 있습니다 또한 다음 구문으로 변수를 선언합니다 암시 적으로 선언 섹션을 생성합니다.
exec 메이저 토토 사이트 int i = 4;
당신은 프로그램에 많은 선언 섹션을 가질 수 있습니다. 좋다.
선언은 또한 출력 파일에 반영됩니다. 정상적인 C 변수이므로 다시 선언 할 필요가 없습니다. 메이저 토토 사이트 명령에 사용되지 않는 변수는 이 특별 섹션 밖에서 정상적으로 선언됩니다.
구조 또는 조합의 정의도 나열되어야합니다. 내부선언섹션. 그렇지 않으면 사전 처리기는 이러한 유형을 처리 할 수 없습니다. 정의를 알고 있습니다.
이제 귀하는 귀하가 생성 한 데이터를 전달할 수 있어야합니다. 메이저 토토 사이트 명령으로 프로그램. 그러나 당신은 어떻게 검색합니까? 쿼리 결과? 이를 위해 임베디드 메이저 토토 사이트이 제공합니다 일반적인 명령의 특수 변형selectandfetch. 이것들 명령에는 특별한in절 검색 된 값이 저장해야합니다.selecta 단일 행만 반환하는 쿼리,fetch여러 리턴을 반환하는 쿼리에 사용됩니다 줄, 커서 사용.
예는 다음과 같습니다.
/* *이 테이블을 가정하십시오. * 테이블 생성 테스트 1 (a int, b varchar (50)); */ Exec 메이저 토토 사이트 시작 선언 섹션; int v1; 바르 르 차 V2; Exec 메이저 토토 사이트 END DELLARE SECTION; ... exec 메이저 토토 사이트 a, b에 : v1, : v2 test;
thein절차가 나타납니다 선택 목록 및From절. 선택 목록의 요소 수와 다음 목록in(대상 목록이라고도 함) 동일해야합니다.
다음은 명령을 사용하는 예입니다fetch:
Exec 메이저 토토 사이트 시작 선언 섹션; int v1; 바르 르 차 V2; Exec 메이저 토토 사이트 END DELLARE SECTION; ... Exec 메이저 토토 사이트 선택 A, B Test에서 FOO Cursor를 선언합니다. ... 하다 ... exec sql 다음은 foo에서 v1, : v2; ... 하는 동안 (...);
여기in조항이 나타납니다 모든 정상적인 조항.
ECPG 응용 프로그램이 값을 교환 할 때 Postgre메이저 토토 사이트 Server 및 예 : 언제와 같은 C 응용 프로그램 서버에서 쿼리 결과를 검색하거나 메이저 토토 사이트을 실행합니다 입력 매개 변수가있는 문서, 값은 필요합니다 Postgre메이저 토토 사이트 데이터 유형과 호메이저 토토 사이트 언어로 변환됩니다 가변 유형 (C 언어 데이터 유형, 구체적으로). 중 하나 ECPG의 주요 요점은 이것을 자동으로 처리한다는 것입니다. 대부분의 경우.
이와 관련하여 두 가지 종류의 데이터 유형이 있습니다. 와 같은 간단한 Postgre메이저 토토 사이트 데이터 유형Integerand텍메이저 토토 사이트를 읽을 수 있습니다 응용 프로그램에 의해 직접 작성됩니다. 다른 Postgre메이저 토토 사이트 데이터 와 같은 유형타임 스탬프and숫자Special을 통해서만 액세스 할 수 있습니다 도서관 기능; 보다섹션 33.4.4.2.
테이블 33-1어떤 Postgre메이저 토토 사이트 데이터 유형이 어느 것에 해당하는지 보여줍니다 C 데이터 유형. 값을 보내거나 받기를 원할 때 Postgre메이저 토토 사이트 데이터 유형이 주어지면 C 변수를 선언해야합니다. 선언 섹션의 해당 C 데이터 유형.
표 33-1. Postgre메이저 토토 사이트 데이터 간의 매핑 유형 및 C 변수 유형
Postgre메이저 토토 사이트 데이터 유형 | 호메이저 토토 사이트 변수 유형 |
---|---|
smallint | 짧은 |
정수 | int |
bigint | 긴 긴 int |
Decimal | Decimal[a] |
숫자 | 숫자[a] |
Real | float |
이중 정밀 | 더블 |
Serial | int |
bigserial | 긴 긴 int |
OID | 서명되지 않은 int |
캐릭터 (n), varchar (n), 텍메이저 토토 사이트 | char [n+1], Varchar [n+1][B] |
이름 | char [namedatalen] |
타임 스탬프 | 타임 스탬프[a] |
간격 | 간격[a] |
날짜 | 날짜[a] |
부울 | bool[C] |
참고 : a.이 유형 만 가능합니다 특수 라이브러리 기능을 통해 액세스; 보다섹션 33.4.4.2. b.선언 안에ecpglib.h c.선언 안에ecpglib.h그렇지 않은 경우 토종의 |
메이저 토토 사이트 문자열 데이터 유형을 처리하려면Varcharand텍메이저 토토 사이트, 호스트를 선언하는 두 가지 가능한 방법이 있습니다 변수.
한 가지 방법 사용char [], 배열char, 이것은 가장 일반적인 방법입니다 C의 문자 데이터 처리
Exec 메이저 토토 사이트 시작 선언 섹션; char str [50]; EXEC 메이저 토토 사이트 종료 선언 섹션;
길이를 직접 돌봐야합니다. 만약에 이 호메이저 토토 사이트 변수를 쿼리의 대상 변수로 사용합니다. 49 자 이상의 문자열을 반환하는 버퍼 오버플로가 발생합니다.
다른 방법은 사용 중입니다.VarcharECPG에서 제공하는 특수 유형 인 유형. 그만큼 유형 배열에 대한 정의Varchar지명으로 변환struct모든 변수. 다음과 같은 선언 :
Varchar var [180];
|
Struct varchar_var int len; char arr [180]; var;
회원ARR호메이저 토토 사이트를 호메이저 토토 사이트합니다 종료 제로 바이트를 포함한 문자열. 따라서 저장하려면 a a 문자열Varchar호메이저 토토 사이트 변수, 호메이저 토토 사이트 변수는 다음을 포함하여 길이로 선언해야합니다. 제로 바이트 터미네이터. 회원Len저장된 문자열의 길이를 유지합니다 에서ARR없이 제로 바이트 종단. 호메이저 토토 사이트 변수가 입력으로 사용되는 경우 쿼리의 경우Strlen (ARR)andLen다르고 짧습니다 하나는 사용됩니다.
Varchar상단 또는 소문자이지만 혼합 된 경우는 아닙니다.
charandVarchar호메이저 토토 사이트 변수도 값을 보유 할 수도 있습니다 다른 메이저 토토 사이트 유형은 문자열에 저장됩니다. 양식.
ECPG는 상호 작용하는 데 도움이되는 특수 유형이 포함되어 있습니다. Postgre메이저 토토 사이트의 일부 특수 데이터 유형으로 쉽게 쉽게 섬기는 사람. 특히에 대한 지원을 구현했습니다.숫자, 십진, 날짜, 타임 스탬프, 그리고간격유형. 이러한 데이터 유형 원시 호메이저 토토 사이트 가변 유형에 유용하게 매핑 될 수 없습니다 (와 같은int, 길다 긴 int또는char []) 복잡한 내부 구조가 있습니다. 응용 프로그램은 처리합니다 호메이저 토토 사이트 변수를 특수 유형으로 선언하여 이러한 유형 PGTYPES 라이브러리에서 기능을 사용하여 액세스합니다. 그만큼 pgtypes 라이브러리,에 자세히 설명섹션 33.6기본 함수를 포함합니다 이러한 유형을 처리하려면 시간에 간격을 추가하기 위해 메이저 토토 사이트 Server에 대한 쿼리 예를 들어 스탬프.
다음 하위 섹션에서는 이러한 특수 데이터 유형을 설명합니다. PGTYPES 라이브러리 기능에 대한 자세한 내용은 참조하십시오.젠 토토 Postgre메이저 토토 사이트 : 문서 : 9.1 : PGTYPES 라이브러리.
다음은 처리 패턴이 있습니다타임 스탬프ECPG 호스트의 변수 애플리케이션.
먼저, 프로그램에는 헤더 파일을 포함해야합니다. 그만큼타임 스탬프유형 :
#include <pgtypes_timestamp.h
다음, 호메이저 토토 사이트 변수를 유형으로 선언타임 스탬프선언 섹션 :
Exec 메이저 토토 사이트 시작 선언 섹션; 타임 스탬프 TS; EXEC 메이저 토토 사이트 종료 선언 섹션;
그리고 호메이저 토토 사이트 변수에 값을 읽은 후,
PGTYPES 라이브러리 기능을 사용하여 처리하십시오. 다음에서
예,타임 스탬프값은입니다
텍메이저 토토 사이트 (ASCII) 양식으로 변환pgtypestimestamp_to_asc ()
기능 :
exec sql select now () :: timestamp in : ts; printf ( "ts = %s \ n", pgtypestimestamp_to_asc (ts));
이 예제는 다음과 같은 결과를 보여줍니다 :
TS = 2010-06-27 18 : 03 : 56.949343
또한 날짜 유형은 동일하게 처리 할 수 있습니다.
방법. 프로그램에는 포함해야합니다pgtypes_date.h, 호메이저 토토 사이트 변수를 다음과 같이 선언합니다
날짜 유형 및 날짜 값을 텍메이저 토토 사이트 양식으로 변환합니다.
사용pgtypesdate_to_asc ()
함수. PGTYPES 라이브러리에 대한 자세한 내용은
기능, 참조젠 토토 PostgreSQL : 문서 :.
간격타입 또한와 유사합니다.타임 스탬프and날짜유형. 그러나 필요합니다. 메모리를 할당하려면간격명시 적으로 값을 입력하십시오. 다시 말해, 메모리 공간 변수는 힙 메모리에 할당되어야합니다. 스택 메모리
여기 예제 프로그램이 있습니다 :
#include <stdio.h #include <stdlib.h #include <pgtypes_interval.h int 메인 (void) Exec 메이저 토토 사이트 시작 선언 섹션; 간격 *in; Exec 메이저 토토 사이트 END DELLARE SECTION; exec sql testdb에 연결; in = pgtypesinterval_new (); Exec 메이저 토토 사이트 선택 '1 분':: 간격 : in; printf ( "interval = %s \ n", pgtypesinterval_to_asc (in)); pgtypesinterval_free (in); Exec 메이저 토토 사이트 커밋; Exec 메이저 토토 사이트 모든 분리; 반환 0;
숫자및십진유형은와 유사합니다.간격유형 : 정의가 필요합니다 포인터, 힙에 일부 메모리 공간을 할당하고 PGTYPES 라이브러리 기능을 사용하여 변수에 액세스합니다. PGTYPES 라이브러리 기능에 대한 자세한 내용은 참조하십시오.젠 토토 Postgre메이저 토토 사이트 : 문서 : 9.1 : PGTYPES 라이브러리.
기능이 특별히 제공되지 않습니다.Decimal타입. 응용 프로그램이 필요합니다 로 변환숫자변수 PGTYPES 라이브러리 기능을 사용하여 추가로 수행합니다 처리.
여기 예제 프로그램 취급숫자andDecimal타입 변수.
#include <stdio.h #include <stdlib.h #include <pgtypes_numeric.h 메이저 토토 사이트ERROR가 중지 될 때마다 메이저 토토 사이트 EXEC; int 메인 (void) Exec 메이저 토토 사이트 시작 선언 섹션; 숫자 *num; 숫자 *num2; 10 진수 *12 월; Exec 메이저 토토 사이트 END DELLARE SECTION; exec sql testdb에 연결; num = pgtypesnumeric_new (); dec = pgtypesdecimal_new (); Exec 메이저 토토 사이트 Select 12.345 :: Numeric (4,2), 23.456 :: Decimal (4,2) in : num, : dec; printf ( "numeric = %s \ n", pgtypesnumeric_to_asc (num, 0)); printf ( "numeric = %s \ n", pgtypesnumeric_to_asc (num, 1)); printf ( "numeric = %s \ n", pgtypesnumeric_to_asc (num, 2)); /* 소수점을 숫자로 변환하여 소수점 값을 표시합니다. */ num2 = pgtypesnumeric_new (); pgtypesnumeric_from_decimal (dec, num2); printf ( "decimal = %s \ n", pgtypesnumeric_to_asc (num2, 0)); printf ( "decimal = %s \ n", pgtypesnumeric_to_asc (num2, 1)); printf ( "decimal = %s \ n", pgtypesnumeric_to_asc (num2, 2)); pgtypesnumeric_free (num2); pgtypesdecimal_free (12 월); pgtypesnumeric_free (num); Exec 메이저 토토 사이트 커밋; Exec 메이저 토토 사이트 모든 분리; 반환 0;
호메이저 토토 사이트 변수로서 배열, typedefs, 스트러크와 포인터.
호메이저 토토 사이트 변수로 배열에 대한 두 가지 사용 사례가 있습니다. 첫 번째는 텍메이저 토토 사이트 문자열을 저장하는 방법입니다.char []또는varchar [], AS 설명섹션 33.4.4.1. 두 번째 유스 케이스는 여러 가지를 검색하는 것입니다 커서를 사용하지 않고 쿼리 결과의 행. 없이 배열, 여러로 구성된 쿼리 결과를 처리합니다 행, 커서와를 사용해야합니다.fetch명령. 그러나 배열 호메이저 토토 사이트와 함께 변수, 여러 행을 한 번에 수신 할 수 있습니다. 그만큼 배열의 길이는 모든 행을 수용하면 버퍼 오버플로가됩니다 아마도 발생할 수 있습니다.
다음 예제 스캔pg_database시스템 테이블 및 모든 OID를 표시합니다 사용 가능한 데이터베이스의 이름 :
int 메인 (void) Exec 메이저 토토 사이트 시작 선언 섹션; int dbid [8]; char dbname [8] [16]; int i; Exec 메이저 토토 사이트 END DELLARE SECTION; memset (dbname, 0, sizeof (char) * 16 * 8); memset (dbid, 0, sizeof (int) * 8); exec sql testdb에 연결; /* 여러 행을 한 번에 배열로 검색합니다. */ exec 메이저 토토 사이트 OID, DATNAME를 선택하십시오 : DBID, : PG_DATABASE의 DBNAME; for (i = 0; i <8; i ++) printf ( "oid =%d, dbname =%s \ n", dbid [i], dbname [i]); Exec 메이저 토토 사이트 커밋; Exec 메이저 토토 사이트 모든 분리; 반환 0;
이 예제는 다음과 같은 결과를 보여줍니다. (정확한 값 지역 상황에 의존합니다.)
oid = 1, dbname = 템플릿 1 OID = 11510, dbname = template0 oid = 11511, dbname = postgres oid = 313780, dbname = testdb oid = 0, dbname = oid = 0, dbname = oid = 0, dbname =
멤버 이름의 열 이름과 일치하는 구조 쿼리 결과는 여러 열을 검색하는 데 사용될 수 있습니다. 한 번. 구조를 통해 여러 열 값을 처리 할 수 있습니다 단일 호메이저 토토 사이트 변수에서.
다음 예제는 OID, 이름 및 크기를 검색합니다
의 사용 가능한 데이터베이스 중pg_database시스템 테이블 및 사용pg_database_size ()
함수.
이 예에서는 구조 변수dbinfo_t이름이 각각 일치하는 멤버가 있습니다
열select결과입니다
여러 가지를 넣지 않고 하나의 결과 행을 검색하는 데 사용됩니다
의 호메이저 토토 사이트 변수Fetch진술.
Exec 메이저 토토 사이트 시작 선언 섹션; typedef struct int oid; char datname [65]; 긴 긴 INT 크기; dbinfo_t; dbinfo_t dbval; Exec 메이저 토토 사이트 END DELLARE SECTION; memset (& dbval, 0, sizeof (dbinfo_t)); Exec 메이저 토토 사이트은 PG_DATABASE의 크기로 SELECT OID, DATNAME, PG_DATABASE_SIZE (OID)에 대한 CUR1 커서를 선언합니다. Exec 메이저 토토 사이트 Open CUR1; / * 결과 세트의 끝이 도달하면 while loop */ 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) /* 여러 열을 하나의 구조로 가져옵니다. */ exec 메이저 토토 사이트은 cur1에서 다음과 같이 가져옵니다 : dbval; /* 구조의 구성원을 인쇄합니다. */ printf ( "oid =%d, datname =%s, size =%lld \ n", dbval.oid, dbval.datname, dbval.size); Exec 메이저 토토 사이트 Clos Cur1;
이 예제는 다음과 같은 결과를 보여줍니다. (정확한 값 지역 상황에 의존합니다.)
oid = 1, datname = template1, size = 4324580 OID = 11510, datname = template0, size = 4243460 OID = 11511, datname = postgres, size = 4324580 OID = 313780, datname = testdb, size = 8183012
구조 호메이저 토토 사이트 변수"흡수"구조만큼 많은 열 전지. 추가 열을 다른 호메이저 토토 사이트에 할당 할 수 있습니다 변수. 예를 들어, 위의 프로그램도 가능합니다 이와 같이 재구성,크기구조 외부의 변수 :
Exec 메이저 토토 사이트 시작 선언 섹션; typedef struct int oid; char datname [65]; dbinfo_t; dbinfo_t dbval; 긴 긴 INT 크기; Exec 메이저 토토 사이트 END DELLARE SECTION; memset (& dbval, 0, sizeof (dbinfo_t)); Exec 메이저 토토 사이트은 PG_DATABASE의 크기로 SELECT OID, DATNAME, PG_DATABASE_SIZE (OID)에 대한 CUR1 커서를 선언합니다. Exec 메이저 토토 사이트 Open CUR1; / * 결과 세트의 끝이 도달하면 while loop */ 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) /* 여러 열을 하나의 구조로 가져옵니다. */ exec 메이저 토토 사이트 CUR1에서 다음과 같이 : dbval, : size; /* 구조의 구성원을 인쇄합니다. */ printf ( "oid =%d, datname =%s, size =%lld \ n", dbval.oid, dbval.datname, size); Exec 메이저 토토 사이트 Clos Cur1;
사용typedef지도를위한 키워드 이미 기존 유형에 대한 새로운 유형.
Exec 메이저 토토 사이트 시작 선언 섹션; typedef char mychartype [40]; typedef long serial_t; EXEC 메이저 토토 사이트 종료 선언 섹션;
사용할 수 있습니다.
exec 메이저 토토 사이트 유형 serial_t는 길다;
이 선언은 선언의 일부일 필요는 없습니다. 부분.
가장 일반적인 유형으로 포인터를 선언 할 수 있습니다. 메모 그러나 포인터를 대상 변수로 사용할 수는 없습니다. 자동 할당없이 쿼리. 보다섹션 33.7더 많은 경우 자동 할당에 관한 정보.
exec 메이저 토토 사이트 시작 선언 섹션; int *intp; char ** charp; EXEC 메이저 토토 사이트 종료 선언 섹션;
이 섹션에는 Nonscalar를 처리하는 방법에 대한 정보가 포함되어 있습니다 ECPG 애플리케이션에서 사용자 정의 메이저 토토 사이트 레벨 데이터 유형. 이것은 호메이저 토토 사이트 변수의 처리와는 다릅니다. 이전 섹션에 설명 된 비 프리맨 유형의.
다차원 메이저 토토 사이트 레벨 어레이는 직접적이지 않습니다 ECPG에서 지원됩니다. 1 차원 메이저 토토 사이트 레벨 배열 일 수 있습니다 C 배열 호메이저 토토 사이트 변수에 매핑되고 그 반대도 마찬가지입니다. 하지만, 진술을 작성할 때 ECPG는 C 열, C 배열이 입력되는지 확인할 수 없습니다. 해당 메이저 토토 사이트 레벨 어레이. 출력을 처리 할 때 메이저 토토 사이트 문, ECPG에는 필요한 정보가 있으므로 둘 다 배열인지 확인합니다.
쿼리가 액세스하는 경우요소배열 별도로, 이것은 ECPG에서 배열을 사용하지 않습니다. 그 다음에, 요소에 매핑 할 수있는 유형이있는 호메이저 토토 사이트 변수 유형을 사용해야합니다. 예를 들어, 열 유형이 배열 인 경우 의Integer, 유형의 호메이저 토토 사이트 변수int사용할 수 있습니다. 또한 요소라면 유형은Varchar또는텍메이저 토토 사이트, 유형의 호메이저 토토 사이트 변수char []또는varchar []할 수 있습니다 사용된.
예는 다음과 같습니다. 다음 표를 가정하십시오.
테이블 생성 t3 ( II 정수 [] ); testdb = select * from t3; II ------------- 1,2,3,4,5
다음 예제 프로그램은 4 번째 요소를 검색합니다 배열은 유형의 호메이저 토토 사이트 변수에 저장int:
Exec 메이저 토토 사이트 시작 선언 섹션; int II; Exec 메이저 토토 사이트 END DELLARE SECTION; t3에서 Select II [4]에 대한 exec 메이저 토토 사이트 선언 cur1 커서; Exec 메이저 토토 사이트 Open CUR1; 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) exec sql fetch에서 cur1에서 : ii; printf ( "ii =%d \ n", ii); Exec 메이저 토토 사이트 Clos Cur1;
이 예제는 다음과 같은 결과를 보여줍니다.
ii = 4
여러 배열 요소를 여러 요소에 매핑하려면 배열 유형 호메이저 토토 사이트 변수는 배열 열의 각 요소와 호메이저 토토 사이트 변수 배열의 각 요소를 관리해야합니다. 별도로, 예 :
Exec 메이저 토토 사이트 시작 선언 섹션; int II_A [8]; Exec 메이저 토토 사이트 END DELLARE SECTION; SELECT II [1], II [2], II [3], II [4]에 대한 EXEC 메이저 토토 사이트 선언 CUR1 커서; Exec 메이저 토토 사이트 Open CUR1; 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) exec 메이저 토토 사이트은 cur1에서 다음과 같이 가져옵니다 : ii_a [0], : ii_a [1], : ii_a [2], : ii_a [3]; ...
다시 참고
Exec 메이저 토토 사이트 시작 선언 섹션; int II_A [8]; Exec 메이저 토토 사이트 END DELLARE SECTION; exec 메이저 토토 사이트 T3의 Select II에 대한 CUR1 커서 선언; Exec 메이저 토토 사이트 Open CUR1; 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) /* 잘못된 */ CUR1에서 EXEC 메이저 토토 사이트 페치 : II_A; ...
이 경우 올바르게 작동하지 않습니다. 배열 유형 열을 배열 호메이저 토토 사이트 변수에 매핑합니다. 곧장.
또 다른 해결 방법은 외부에 배열을 저장하는 것입니다 유형의 호메이저 토토 사이트 변수에서 문자열 표현char []또는varchar []. 을 위한 이 표현에 대한 자세한 내용은 참조섹션 8.14.2. 이것에 유의하십시오 배열이 배열로 자연스럽게 액세스 할 수 없음을 의미합니다. 호스트 프로그램에서 (추가 처리없이 텍메이저 토토 사이트 표현).
복합 유형은 ECPG에서 직접 지원되지 않지만 쉬운 해결 방법이 가능합니다. 사용 가능한 해결 방법이 있습니다 위의 배열에 대해 설명 된 것과 유사 : 어느 쪽이든 액세스 각 속성은 별도로 또는 외부 문자열을 사용합니다 대표.
다음 예제의 경우 다음 유형을 가정하십시오 테이블:
comp_t 유형 Comp_t 생성 (Intval Integer, TextVal Varchar (32)); 테이블 t4 (compval comp_t) 만들기; t4 값에 삽입 ((256, 'postgresql');
가장 분명한 해결책은 각 속성에 액세스하는 것입니다 갈라져. 다음 프로그램은에서 데이터를 검색합니다 유형의 각 속성을 선택하여 예제comp_t별도로 :
exec 메이저 토토 사이트 시작 선언 섹션; int intval; Varchar TextVal [33]; Exec 메이저 토토 사이트 END DELLARE SECTION; /* 복합 유형 열의 각 요소를 선택 목록에 넣습니다. */ exec 메이저 토토 사이트 SELECT (Compval) .intVal, (Compval) .textVal에서 CUR1 커서를 선언합니다. Exec 메이저 토토 사이트 Open CUR1; 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) /* 복합 유형 열의 각 요소를 호메이저 토토 사이트 변수로 가져옵니다. */ exec 메이저 토토 사이트 CUR1에서 다음과 같이 가져옵니다 : intval, : textVal; printf ( "intval =%d, textVal =%s \ n", intval, textVal.arr); Exec 메이저 토토 사이트 Clos Cur1;
이 예를 향상시키기 위해서는 호메이저 토토 사이트 변수를 저장합니다fetch명령이 될 수 있습니다 하나의 구조로 모였습니다. 호메이저 토토 사이트에 대한 자세한 내용은 구조 양식의 변수, 참조섹션 33.4.4.3.2. 구조로 전환하려면 예제가 할 수 있습니다 아래와 같이 수정됩니다. 두 호메이저 토토 사이트 변수intval및TextVal, 의 구성원이 되십시오.comp_t구조 및 구조는에 지정되어 있습니다.Fetch명령.
Exec 메이저 토토 사이트 시작 선언 섹션; typedef struct int intval; Varchar TextVal [33]; comp_t; comp_t compval; Exec 메이저 토토 사이트 END DELLARE SECTION; /* 복합 유형 열의 각 요소를 선택 목록에 넣습니다. */ exec 메이저 토토 사이트 SELECT (Compval) .intVal, (Compval) .textVal에서 CUR1 커서를 선언합니다. Exec 메이저 토토 사이트 Open CUR1; 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) /* 선택 목록의 모든 값을 하나의 구조로 넣습니다. */ CUR1에서 EXEC 메이저 토토 사이트 가져 오기 : Compval; printf ( "intval =%d, textVal =%s \ n", compval.intval, compval.textVal.arr); Exec 메이저 토토 사이트 Clos Cur1;
구조가 사용되지만fetch명령, 속성 이름select조항은 하나씩 지정됩니다 하나. 이것은 a를 사용하여 향상 될 수 있습니다.*복합재의 모든 속성을 요청합니다 유형 값.
... Exec 메이저 토토 사이트 선언 CUR1 커서는 SELECT (Compval)*에서 T4에서; Exec 메이저 토토 사이트 Open CUR1; 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) /* 선택 목록의 모든 값을 하나의 구조로 넣습니다. */ CUR1에서 EXEC 메이저 토토 사이트 가져 오기 : Compval; printf ( "intval =%d, textVal =%s \ n", compval.intval, compval.textVal.arr);
이 방법으로 복합 유형을 구조에 매핑 할 수 있습니다 ECPG가 이해하지 못하더라도 거의 원활하게 복합 유형 자체.
마지막으로 복합 유형을 저장할 수도 있습니다 호메이저 토토 사이트의 외부 문자열 표현의 값 유형 변수char []또는varchar []. 그러나 그렇게하면 쉽지 않습니다 호메이저 토토 사이트에서 값의 필드에 액세스 할 수 있습니다. 프로그램.
새로운 사용자 정의 기본 유형은 직접 지원되지 않습니다 ECPG. 외부 문자열 표현과 호스트를 사용할 수 있습니다 유형 변수char []또는varchar [],이 솔루션은 실제로입니다 많은 유형에 적합하고 충분합니다.
여기 데이터 유형을 사용하는 예입니다복잡한예제에서섹션 35.11. 외부 문자열
그 유형의 표현은(%lf,%lf)46478_46522complex_in ()
andcomplex_out ()
함수섹션 35.11. 다음 예
복잡한 유형 값 삽입(1,1)and(3,3)로
열aandB그리고 후에 테이블에서 선택하십시오
저것.
Exec 메이저 토토 사이트 시작 선언 섹션; 바르 차 A [64]; 바르 차 B [64]; Exec 메이저 토토 사이트 END DELLARE SECTION; exec 메이저 토토 사이트 insert invest_complex 값 ( '(1,1)', '(3,3)'); EXEC 메이저 토토 사이트 선언 CUR1 커서는 선택 a, b에서 b, b에서 b; Exec 메이저 토토 사이트 Open CUR1; 찾을 수 없을 때마다 Exec 메이저 토토 사이트이 중단됩니다. 동안 (1) exec 메이저 토토 사이트은 cur1에서 다음과 같이 가져옵니다 : a, : b; printf ( "a =%s, b =%s \ n", a.arr, b.arr); Exec 메이저 토토 사이트 Clos Cur1;
이 예제는 다음과 같은 결과를 보여줍니다 :
a = (1,1), b = (3,3)
다른 해결 방법은 직접 사용을 피하는 것입니다 ECPG에서 사용자 정의 유형과 대신 기능을 작성하거나 사용자 정의 유형과 a를 변환하는 캐스트 ECPG가 처리 할 수있는 원시 유형. 그러나 그 유형에 유의하십시오 캐스트, 특히 암시적인 캐스트를 도입해야합니다 유형 시스템은 매우 신중하게.
예를 들어
CREATE CREATION_COMPLEX (R DOUBLE, I DOUBLE)는 복잡한 반환을 반환합니다 언어 메이저 토토 사이트 불변 AS $$ $ 1 * complex '(1,0') ' + $ 2 * complex'(0,1) '$$;
이 정의 이후 다음
exec 메이저 토토 사이트 시작 선언 섹션; 이중 A, B, C, D; Exec 메이저 토토 사이트 END DELLARE SECTION; a = 1; b = 2; C = 3; d = 4; exec 메이저 토토 사이트 insert istes_complex 값 (create_complex (: a, : b), create_complex (: c, : d));
exec 메이저 토토 사이트 insert invest_complex 값 ( '(1,2)', '(3,4)';
위의 예는 널 값을 처리하지 않습니다. 사실, 검색 예제는 널을 가져 오면 오류가 발생합니다. 데이터베이스의 값. 널 값을 전달할 수 있습니다 데이터베이스 또는 데이터베이스에서 NULL 값을 검색하려면 각 호스트에 두 번째 호메이저 토토 사이트 변수 사양을 추가하십시오 데이터를 포함하는 변수. 이 두 번째 호메이저 토토 사이트 변수입니다 호출표시기a 데이텀이 무효인지를 알려주는 플래그,이 경우 실제 호메이저 토토 사이트 변수의 값은 무시됩니다. 여기 예입니다 널 값의 검색을 올바르게 처리합니다.
Exec 메이저 토토 사이트 시작 선언 섹션; varchar val; int val_ind; EXEC 메이저 토토 사이트 종료 선언 섹션 : ... exec 메이저 토토 사이트 선택 B로 : val : val_ind from test1;
지표 변수val_ind의지 값이 무효가되지 않으면 0이되면 음수가됩니다. 그 값은 널이었다.
표시기에는 또 다른 기능이 있습니다 긍정적이므로 값이 무효가 아니라는 것을 의미하지만 호메이저 토토 사이트 변수에 저장되었을 때 잘 렸습니다.
인수 인 경우-r no_indicatorIS 전처리 자에게 전달ECPG, It 작업"No-Indicator"모드. ~ 안에 인디케이트 없음 모드, 표시기 변수가 지정되지 않은 경우 NULL 값은 문자열에 대한 신호 (입력 및 출력) 빈 문자열로 유형 및 정수 유형에 대해 가장 낮은 유형 유형에 대한 가능한 값 (예 :int_minforint).