Postgresql 9.2.24 문서 | ||||
---|---|---|---|---|
Postgre토토 사이트 추천 : 문서 : 9.2 : 개념 | 토토 꽁 머니 : 문서 : 9.2 : ECPG- C에 포함 된 SQL | 33 장ecpg- 임베디드SQLin c | 다음 |
이 섹션은 데이터베이스를 열고 닫고 스위치하는 방법에 대해 설명합니다. 사이.
하나는 다음을 사용하여 데이터베이스에 연결합니다 성명:
Exec SQL Connect대상[asConnection-name] [사용자사용자 이름];
the대상지정할 수 있습니다 다음과 같은 방법으로 :
dbname[@hostname] [:포트]
tcp : postgresql : //hostname[:포트] [/dbname] [?옵션]
unix : postgresql : //hostname[:포트] [/dbname] [?옵션]
위의 것 중 하나를 포함하는 SQL 문자열 문자 양식
하나를 포함하는 문자 변수에 대한 참조 위의 양식 (예 참조)
기본값
문자 그대로 연결 대상을 지정하는 경우 (즉, 변수 참조를 통해) 그리고 당신은 값을 인용하지 않습니다. 그런 다음 일반 SQL의 사례 감수 규칙이 적용됩니다. ~ 안에 이 경우 개별 매개 변수를 두 배로 인용 할 수도 있습니다 필요에 따라 별도로. 실제로는 아마도 적을 것입니다 오류가 발생하기 쉬운 (단일 크기) 문자열 리터럴 또는 a 가변 참조. 연결 대상기본값기본값에 대한 연결을 시작합니다 기본 사용자 이름의 데이터베이스. 별도의 사용자 이름이 없습니다 이 경우 연결 이름을 지정할 수 있습니다.
사용자 이름을 지정하는 방법에는 여러 가지가 있습니다.
사용자 이름
사용자 이름/비밀번호
사용자 이름식별비밀번호
사용자 이름사용비밀번호
위와 같이 매개 변수사용자 이름and암호SQL 식별자, SQL 일 수 있습니다 문자열 리터럴 또는 문자 변수에 대한 참조
theConnection-name사용됩니다 하나의 프로그램에서 여러 연결을 처리합니다. 그럴 수 있습니다 프로그램이 하나의 연결 만 사용하는 경우 생략되었습니다. 가장 최근에 열린 연결은 현재 연결이됩니다. SQL 문이있을 때 기본적으로 사용됩니다. 실행되었습니다 (이 장 후면 참조).
다음은의 몇 가지 예입니다.Connect진술 :
exec sql mydb@sql.mydomain.com에 연결; exec sql unix에 연결 : 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; */
마지막 양식은 위에 언급 된 변형을 사용합니다. 문자 변수 참조. 나중에 나중에 볼 수 있습니다 접두사시 SQL 문에서 C 변수를 사용하는 방법 콜론과 함께.
연결 대상의 형식은 SQL 표준에 지정됩니다. 따라서 개발하고 싶다면 휴대용 응용 프로그램은 위의 마지막 예는 연결 목표를 캡슐화합니다 어딘가에 문자열.
임베디드 SQL 프로그램의 SQL 문은 기본적으로입니다 현재 연결, 즉 가장 최근에 실행되었습니다. 하나를 열었습니다. 응용 프로그램이 여러 가지를 관리 해야하는 경우 연결,이를 처리하는 두 가지 방법이 있습니다.
첫 번째 옵션은 명시 적으로 연결을 선택하는 것입니다. 각 SQL 문은 예를 들어 :
exec sql atConnection-name선택 ...;
이 옵션은 응용 프로그램 인 경우 특히 적합합니다 혼합 순서로 여러 연결을 사용해야합니다.
응용 프로그램에서 여러 실행 스레드를 사용하는 경우, 그들은 그것들입니다 동시에 연결을 공유 할 수 없습니다. 당신은 둘 중 하나입니다 연결에 대한 액세스 (뮤텍스 사용) 또는 각 스레드에 대한 연결을 사용하십시오.
두 번째 옵션은 현재 연결. 그 진술은 :
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 TestDB2에 CON2 사용자 테스트를 연결하고; Exec SQL TestDB3에 CON3 사용자 테스트를 연결하고; /*이 쿼리는 마지막으로 열린 데이터베이스 "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이어야 함)
연결을 닫으려면 다음 진술을 사용하십시오.
Exec SQL 분리 [Connection];
theConnection할 수 있습니다 다음과 같은 방법으로 지정됨 :
Connection-name
기본값
현재
all
연결 이름이 지정되지 않은 경우 현재 연결 폐쇄되었습니다.
응용 프로그램이 항상 명시 적으로 좋은 스타일입니다 열린 모든 스포츠 토토 베트맨에서 분리합니다.