36.2. 데이터베이스 스포츠 토토 베트맨 관리

이 섹션은 데이터베이스 스포츠 토토 베트맨을 열고 닫고 전환하는 방법을 설명합니다.

36.2.1. 데이터베이스 서버에 스포츠 토토 베트맨

하나는 다음 문을 사용하여 데이터베이스에 스포츠 토토 베트맨합니다.

Exec SQL Connect대상[asConnection-name] [사용자사용자 이름];

the대상다음 방법으로 지정할 수 있습니다.

  • dbname[@hostname] [:포트]
  • tcp : postgresql : //hostname[:포트] [/dbname] [?옵션]
  • unix : postgresql : // localhost [:포트] [/dbname] [?옵션]
  • 위의 양식 중 하나를 포함하는 SQL 문자열 리터럴
  • 위 형식 중 하나를 포함하는 문자 변수에 대한 참조 (예제 참조)
  • 기본값

스포츠 토토 베트맨 대상기본값기본 사용자 이름에서 기본 데이터베이스에 대한 스포츠 토토 베트맨을 시작합니다. 이 경우 별도의 사용자 이름 또는 스포츠 토토 베트맨 이름을 지정할 수 없습니다.

스포츠 토토 베트맨 대상을 직접 지정하면 (즉, 문자열 문자 또는 가변 참조가 아닌) 대상의 구성 요소는 일반 SQL 구문 분석을 통해 전달됩니다. 이것은 예를 들어를 의미합니다.hostname도트로 분리 된 하나 이상의 SQL 식별자처럼 보이고,이 식별자는 두 번 인용되지 않는 한 케이스 배치됩니다. 모든 값옵션SQL 식별자, 정수 또는 가변 참조 여야합니다. 물론 두 번 인용하여 거의 모든 것을 SQL 식별자에 넣을 수 있습니다. 실제로, 스포츠 토토 베트맨 대상을 직접 작성하는 것보다 (단일 크기) 문자열 리터럴 또는 가변 참조를 사용하는 것은 오류가 적을 수 있습니다..

사용자 이름을 지정하는 방법에는 여러 가지가 있습니다.

  • 사용자 이름
  • 사용자 이름/비밀번호
  • 사용자 이름식별비밀번호
  • 사용자 이름사용비밀번호

위와 같이 매개 변수사용자 이름and비밀번호SQL 식별자, SQL 문자열 리터럴 또는 문자 변수에 대한 참조가 될 수 있습니다.

스포츠 토토 베트맨 대상에 포함 된 경우옵션키워드=value사양은 Ampersands (에 의해 구분됩니다.&). 허용 된 키워드는에 의해 인식 된 것과 동일합니다.libpq(참조섹션 34.1.2). 공백은 어떤 전에도 무시됩니다키워드또는value, 내부 또는 그 이후는 아니지만. 쓸 방법이 없음&a 내value.

소켓 스포츠 토토 베트맨을 지정할 때 (unix :prefix), 호스트 이름은 정확히LocalHost. 비 디폴트 소켓 디렉토리를 선택하려면 디렉토리의 PathName을 A의 값으로 작성하십시오.host옵션옵션대상의 일부.

theConnection-name한 프로그램에서 여러 스포츠 토토 베트맨을 처리하는 데 사용됩니다. 프로그램이 하나의 스포츠 토토 베트맨 만 사용하는 경우 생략 할 수 있습니다. 가장 최근에 열린 스포츠 토토 베트맨은 현재 스포츠 토토 베트맨이되며 SQL 문을 실행할 때 기본적으로 사용됩니다 (이 장의 뒷부어 참조).

다음은의 몇 가지 예입니다.Connect진술 :

exec sql mydb@sql.mydomain.com에 스포츠 토토 베트맨;

exec sql tcp에 스포츠 토토 베트맨 : postgresql : //sql.mydomain.com/mydb myconnection user john;

Exec SQL 시작 선언 섹션;
const char *target = "mydb@sql.mydomain.com";
const char *user = "John";
const char *passwd = "비밀";
Exec SQL END DELLARE SECTION;
 ...
Exec SQL Connect : 대상 사용자 : 사용자 사용 : Passwd;
/* 또는 EXEC SQL Connect : 대상 사용자 : user/: passwd; */

마지막 예제는 위에 언급 된 기능을 문자 변수 참조로 사용합니다. 콜론으로 접두사 할 때 C 변수가 SQL 문에서 C 변수를 어떻게 사용할 수 있는지 나중에 볼 수 있습니다.

스포츠 토토 베트맨 대상의 형식이 SQL 표준에 지정되지 않은 것이 좋습니다. 따라서 휴대용 애플리케이션을 개발하려면 위의 마지막 예제를 기반으로 무언가를 사용하여 스포츠 토토 베트맨 대상 문자열을 캡슐화하여 어딘가에 있습니다.

신뢰할 수없는 사용자가 채택되지 않은 데이터베이스에 액세스 할 수있는 경우보안 스키마 사용 패턴, 공개적으로 쓰레기 스키마를 제거하여 각 세션을 시작하십시오search_path. 예를 들어 add옵션 = -c search_path =to옵션또는 문제exec SQL 선택 PG_CATALOG.SET_CONFIG ( 'Search_Path', '', False);스포츠 토토 베트맨 후. 이 고려 사항은 ECPG에만 국한되지 않습니다. 임의의 SQL 명령을 실행하기 위해 모든 인터페이스에 적용됩니다.

36.2.2. 스포츠 토토 베트맨 선택

임베디드 SQL 프로그램의 SQL 문은 기본적으로 현재 스포츠 토토 베트맨에 대해 실행됩니다. 응용 프로그램이 여러 스포츠 토토 베트맨을 관리 해야하는 경우이를 처리하는 세 가지 방법이 있습니다.

첫 번째 옵션은 각 SQL 문에 대한 스포츠 토토 베트맨을 명시 적으로 선택하는 것입니다.

exec sql atConnection-name선택 ...;

이 옵션은 응용 프로그램이 혼합 순서로 여러 스포츠 토토 베트맨을 사용해야하는 경우 특히 적합합니다.

응용 프로그램에서 여러 실행 스레드를 사용하는 경우 동시에 스포츠 토토 베트맨을 공유 할 수 없습니다. 스포츠 토토 베트맨에 대한 액세스 (Mutxes 사용)에 대한 액세스를 명시 적으로 제어하거나 각 스레드에 대한 스포츠 토토 베트맨을 사용해야합니다.

두 번째 옵션은 현재 스포츠 토토 베트맨을 전환하기 위해 명령문을 실행하는 것입니다. 그 진술은 :

Exec SQL Set ConnectionConnection-name;

이 옵션은 동일한 스포츠 토토 베트맨에서 많은 진술을 실행 해야하는 경우 특히 편리합니다.

여러 데이터베이스 스포츠 토토 베트맨을 관리하는 예제 프로그램이 있습니다 :

#include <stdio.h

Exec SQL 시작 선언 섹션;
    char dbname [1024];
Exec SQL END DELLARE SECTION;

int
기본()

    EXEC SQL TestDB1에 CON1 사용자 테스트를 사용합니다.
    Exec SQL 선택 PG_CATALOG.SET_CONFIG ( 'search_Path', '', False); Exec SQL 커밋;
    EXEC SQL TestDB2에 CON2 사용자 테스트를 스포츠 토토 베트맨하고;
    Exec SQL 선택 PG_CATALOG.SET_CONFIG ( 'search_Path', '', False); Exec SQL 커밋;
    Exec SQL TestDB3에 CON3 사용자 테스트를 스포츠 토토 베트맨하고;
    Exec SQL 선택 PG_CATALOG.SET_CONFIG ( 'search_Path', '', False); Exec SQL 커밋;

    /*이 쿼리는 마지막으로 열린 데이터베이스 "TestDB3"에서 실행됩니다. */
    exec SQL select current_database ()에 : dbname;
    printf ( "current =%s (testdb3이어야 함) \ n", dbname);

    / * "at"사용 "testdb2"에서 쿼리를 실행합니다. */
    con2에서 exec sql current_database ()를 선택하십시오 : dbname;
    printf ( "current =%s (testdb2이어야 함) \ n", dbname);

    /* 현재 스포츠 토토 베트맨을 "TestDB1"으로 전환합니다. */
    EXEC SQL SET 스포츠 토토 베트맨 CON1;

    exec SQL select current_database ()에 : dbname;
    printf ( "current =%s (testdb1이어야 함) \ n", dbname);

    Exec SQL 모든 분리;
    반환 0;

이 예제는이 출력을 생성합니다 :

current = testdb3 (testdb3이어야 함)
current = testdb2 (testdb2이어야 함)
current = testdb1 (testdb1이어야 함)

세 번째 옵션은 스포츠 토토 베트맨에 스포츠 토토 베트맨된 SQL 식별자를 선언하는 것입니다.

exec sql atConnection-name선언Statement-Name진술;
Exec SQL 준비Statement-Name출발 :Dyn-string;

SQL 식별자를 스포츠 토토 베트맨에 스포츠 토토 베트맨하면 AT 절없이 동적 SQL을 실행합니다. 이 옵션은 사전 처리기 지시문처럼 작동하므로 링크는 파일에서만 활성화됩니다.

이 옵션을 사용하는 예제 프로그램이 있습니다.

#include <stdio.h

Exec SQL 시작 선언 섹션;
char dbname [128];
char *dyn_sql = "select current_database ()";
Exec SQL END DELLARE SECTION;

int main () 
  exec SQL은 con1로 postgres에 스포츠 토토 베트맨하고;
  exec sql testdb에 con2로 스포츠 토토 베트맨;
  CON1에서 SQL EXEC STMT 문을 선언합니다.
  Exec SQL STMT 준비 : Dyn_SQL;
  exec SQL STMT를 실행합니다 : dbname;
  printf ( "%s \ n", dbname);

  Exec SQL 모든 분리;
  반환 0;

이 예제는 기본 스포츠 토토 베트맨이 testdb : 이더라도이 출력을 생성합니다.

Postgres

36.2.3. 스포츠 토토 베트맨 닫기

스포츠 토토 베트맨을 닫으려면 다음 진술을 사용하십시오.

Exec SQL 분리 [스포츠 토토 베트맨];

the스포츠 토토 베트맨다음 방법으로 지정할 수 있습니다.

  • Connection-name
  • 현재
  • all

스포츠 토토 베트맨 이름이 지정되지 않으면 현재 스포츠 토토 베트맨이 닫힙니다.

응용 프로그램이 항상 열린 스포츠 토토 베트맨에서 명시 적으로 분리하는 것은 좋은 스타일입니다.

정정 제출

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