2013-05-22 3 views
1

임시 테이블을 동일한 세션에 대한 절차에 포함시키는 방법.단일 세션에서 임시 테이블 삭제

나는 Postgres Sql의 임시 테이블에 관한 문제에 직면하고 있기 때문에. 이 개 절차를 경우

A() 임시 테이블을 가지는 온도가 (ID, 이름) B() 임시 테이블을 가진이 다음 절차 A가 온도 (ID, 이름, 주소)를 먼저 호출 이후라고하면 말 프로 시저 B가 호출되면 임시 테이블은 프로 시저 A에 정의 된 temp (id, name)와 같은 구조로 유지되고 프로 시저 B에 정의 된 "address"열은 없습니다.

+0

프로 시저 호출이 다른 트랜잭션에있는 경우 절개 수준 임시 테이블을 사용할 수 있습니다. –

답변

0

임시 테이블의 세션 범위가 지정됩니다. 동일한 세션이 프로 시저 호출과 SQL 호출에서 볼 수 있음을 의미합니다. 기본적으로 임시 테이블은 세션에 대해 전역입니다.

  1. 전화 과정 A와 내에서 임시 테이블을 만들고 그것으로 원하는 것을 할 :

    그래서 옵션이 가정 A가 B를 호출합니다. 절차가 끝나면 임시 테이블을 삭제하십시오. A에서 B를 호출하면 B에서 동일한 이름의 임시 테이블을 만들어 사용할 수 있습니다. 좋은 버릇이되면 임시 테이블을 명시 적으로 내려 놓으십시오.

  2. 그렇지 않으면 임시 테이블에 두 개의 다른 이름을 사용하십시오. 지정된 경우

http://www.postgresql.org/docs/9.2/static/sql-createtable.html 는 "일시적 또는 TEMP , 테이블이 임시 테이블로 만들어집니다. 임시 테이블이 자동으로 세션이 끝날 때 삭제됩니다, 또는 선택적으로 현재 트랜잭션의 끝에서 (ON 참조 COMMIT 아래 참조) 임시 테이블에 존재하는 기존의 영구 테이블은 스키마 정규화 된 이름으로 참조되지 않는 한 현재 세션에서 볼 수 없으며 임시 테이블에서 생성 된 모든 인덱스는 자동으로 임시 테이블입니다.

1

PostgreSQL은 프로 시저 수준의 임시 테이블을 지원하지 않으므로이를 수행 할 수 없습니다.

Pg에서 임시 테이블을 사용하는 것이 다른 db와 약간 다릅니다. 귀하의 경우 다른 이름을 사용해야합니다.

+0

만약 내가 커밋 드롭에 사용하고있다면 작동하지 않거나 다른 대안이있다. – ripunj2408813

+0

A에서 B 나 B로부터 A를 절대로 호출하지 않는다면 작동 할 수 있지만 일반적으로는 좋지 않습니다. –

+0

예 절차 A와 B는 서로 독립적이며, 왜이 아이디어가 좋지 않은가요? – ripunj2408813