이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 34.2. 데이터베이스 토토 베이 관리버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

33.2. 데이터베이스 토토 관리

이 섹션에서는 데이터베이스를 열고 닫고 전환하는 방법을 설명합니다. 토토.

33.2.1. 데이터베이스에 토토 서버

하나는 다음을 사용하여 데이터베이스에 토토합니다 진술:

EXEC SQL 토토 대상대상 [AS토토-이름] [사용자사용자 이름];

대상지정 가능 다음과 같은 방법으로:

  • DB이름[@호스트 이름][:포트]

  • tcp:postgresql://호스트 이름[:포트][/DB이름][?옵션]

  • unix:postgresql://호스트 이름[:포트][/db이름][?옵션]

  • 위 중 하나를 포함하는 SQL 문자열 리터럴 양식

  • 다음 중 하나를 포함하는 문자 변수에 대한 참조 위의 양식(예제 참조)

  • 기본값

토토 대상을 문자 그대로 지정하는 경우(즉, 변수 참조를 통해) 값을 인용하지 않은 경우 그러면 일반 SQL의 대소문자 구분 규칙이 적용됩니다. 에서 이 경우 개별 매개변수를 큰따옴표로 묶을 수도 있습니다. 필요에 따라 별도로. 실제로는 아마 더 적을 것이다. (작은따옴표로 묶인) 문자열 리터럴 또는 변수 참조. 토토 대상기본값기본값에 대한 토토을 시작합니다. 기본 사용자 이름으로 데이터베이스를 만듭니다. 별도의 사용자 이름이 없거나 이 경우 토토 이름을 지정할 수 있습니다.

사용자 이름을 지정하는 방법도 다양합니다:

  • 사용자 이름

  • 사용자 이름/비밀번호

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

  • 사용자 이름사용 중비밀번호

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

토토 이름사용됨 하나의 프로그램에서 여러 토토을 처리합니다. 그럴 수 있다 프로그램이 하나의 토토만 사용하는 경우 생략됩니다. 가장 최근에 열린 토토이 현재 토토이 됩니다. 이는 SQL 문을 실행할 때 기본적으로 사용됩니다. 실행됩니다(이 장의 뒷부분 참조).

다음은 몇 가지 예입니다.토토문장:

EXEC SQL이 mydb@sql.mydomain.com에 토토됩니다.

EXEC SQL CONNECT TO unix:postgresql://sql.mydomain.com/mydb AS myconnection USER john;

EXEC SQL 시작 선언 섹션;
const char *target = "mydb@sql.mydomain.com";
const char *user = "존";
EXEC SQL END 선언 섹션;
 ...
EXEC SQL 토토 대상:대상 사용자:사용자;

마지막 형식은 위에서 언급한 변형을 다음과 같이 사용합니다. 문자 변수 참조. 이후 섹션에서 볼 수 있습니다. 접두사를 붙일 때 SQL 문에서 C 변수를 사용하는 방법 콜론을 사용하세요.

토토 대상의 형식이 다음과 같지 않음을 주의하십시오. SQL 표준에 명시되어 있습니다. 그러니 발전하고 싶다면 휴대용 응용 프로그램의 경우 다음을 기반으로 하는 것을 사용하고 싶을 수도 있습니다. 토토 대상을 캡슐화하는 위의 마지막 예 문자열 어딘가에.

33.2.2. 토토 선택

Embedded SQL 프로그램의 SQL 문은 기본적으로 현재 토토, 즉 가장 최근 토토에서 실행됩니다. 하나 열었습니다. 애플리케이션이 여러 개를 관리해야 하는 경우 토토이 있는 경우 이를 처리하는 두 가지 방법이 있습니다.

첫 번째 옵션은 다음에 대한 토토을 명시적으로 선택하는 것입니다. 각 SQL 문은 다음과 같습니다.

EXEC SQL AT토토 이름선택 ...;

이 옵션은 다음과 같은 경우에 특히 적합합니다. 여러 토토을 혼합된 순서로 사용해야 합니다.

귀하의 응용프로그램이 다중 실행 스레드를 사용하는 경우, 동시에 토토을 공유할 수 없습니다. 다음 중 하나를 수행해야 합니다. 토토에 대한 액세스를 명시적으로 제어하거나(뮤텍스를 사용하여) 각 스레드에 대한 토토을 사용하십시오. 각 스레드가 자신의 스레드를 사용하는 경우 토토을 지정하려면 AT 절을 사용해야 합니다. 스레드가 사용할 토토입니다.

두 번째 옵션은 명령문을 실행하여 현재 토토. 그 진술은 다음과 같습니다:

EXEC SQL 세트 토토토토 이름;

이 옵션은 명령문이 많은 경우 특히 편리합니다. 동일한 토토에서 실행됩니다. 그렇지 않다 스레드 인식.

다음은 여러 데이터베이스를 관리하는 예제 프로그램입니다. 토토:

#include <stdio.h

EXEC SQL 시작 선언 섹션;
    char 데이터베이스 이름[1024];
EXEC SQL END 선언 섹션;

정수
메인()

    EXEC SQL CONNECT TO testdb1 AS con1 USER testuser;
    EXEC SQL CONNECT TO testdb2 AS con2 USER testuser;
    EXEC SQL CONNECT TO testdb3 AS con3 USER testuser;

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

    /* "testdb2"에서 쿼리를 실행하기 위해 "AT"를 사용함 */
    EXEC SQL AT con2 SELECT current_database() INTO :dbname;
    printf("현재=%s(testdb2여야 함)\n", dbname);

    /* 현재 토토을 "testdb1"로 전환합니다. */
    EXEC SQL SET 토토 con1;

    EXEC SQL SELECT current_database() INTO :dbname;
    printf("현재=%s(testdb1이어야 함)\n", dbname);

    EXEC SQL 모두 토토 해제;
    0을 반환합니다.

이 예는 다음과 같은 출력을 생성합니다:

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

33.2.3. 토토 종료

토토을 종료하려면 다음 명령문을 사용하십시오:

EXEC SQL 토토 해제 [토토];

토토될 수 있습니다 다음과 같은 방법으로 지정됩니다:

  • 토토 이름

  • 기본값

  • 현재

  • 모두

토토 이름이 지정되지 않으면 현재 토토은 닫혀있습니다.

애플리케이션은 항상 명시적으로 작성하는 것이 좋은 스타일입니다. 열린 모든 토토을 끊으세요.