이 섹션은 데이터베이스 윈 토토을 열고 닫고 전환하는 방법에 대해 설명합니다.
하나는 다음 문을 사용하여 데이터베이스에 윈 토토합니다.
Exec SQL Connect대상
[asConnection-name
] [사용자사용자 이름
];
the대상
다음 방법으로 지정할 수 있습니다.
dbname
[@hostname
] [:포트
]
tcp : postgresql : //hostname
[:포트
] [/dbname
] [?옵션
]
unix : postgresql : // localhost [:포트
] [/dbname
] [?옵션
]
기본값
윈 토토 대상기본값
기본 사용자 이름에서 기본 데이터베이스에 대한 윈 토토을 시작합니다. 이 경우 별도의 사용자 이름 또는 윈 토토 이름을 지정할 수 없습니다.
윈 토토 대상을 직접 지정하면 (즉, 문자열 문자 또는 가변 참조가 아닌) 대상의 구성 요소는 일반 SQL 구문 분석을 통해 전달됩니다. 이것은 예를 들어를 의미합니다.hostname
도트로 분리 된 하나 이상의 SQL 식별자처럼 보이고,이 식별자는 두 번 인용되지 않는 한 케이스 배치됩니다. 모든 값옵션
SQL 식별자, 정수 또는 가변 참조 여야합니다. 물론 두 번 인용하여 거의 모든 것을 SQL 식별자에 넣을 수 있습니다. 실제로, 윈 토토 대상을 직접 작성하는 것보다 (단일 크기) 문자열 리터럴 또는 가변 참조를 사용하는 것은 오류가 적을 수 있습니다..
사용자 이름을 지정하는 방법에는 여러 가지가 있습니다.
사용자 이름
사용자 이름
/비밀번호
사용자 이름
식별비밀번호
사용자 이름
사용비밀번호
위와 같이 매개 변수사용자 이름
and비밀번호
SQL 식별자, SQL 문자열 리터럴 또는 문자 변수에 대한 참조가 될 수 있습니다.
윈 토토 대상에 포함 된 경우옵션
사양은 Ampersands (에 의해 구분됩니다.키워드
=value
&
). 허용 된 키워드는에 의해 인식 된 것과 동일합니다.libpq(참조섹션 32.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 명령을 실행하기 위해 모든 인터페이스에 적용됩니다.
임베디드 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
윈 토토을 닫으려면 다음 진술을 사용하십시오.
Exec SQL 분리 [Connection
];
the윈 토토
다음 방법으로 지정할 수 있습니다.
Connection-name
현재
all
윈 토토 이름이 지정되지 않으면 현재 윈 토토이 닫힙니다.
응용 프로그램이 항상 열린 윈 토토과 명시 적으로 분리하는 것이 좋습니다.
문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면