1

SP에서 Firebird로 "create table as select"를 시뮬레이트하는 방법을 찾고 있습니다.파이어 버드 : 테이블 생성을 시뮬레이트 하시겠습니까?

우리는 다른 제품에서이 문을 자주 사용합니다.이 문은 적은 색인 생성 세트를 만들기 쉽고 서버 측에서 매우 빠른 결과를 제공하기 때문에 자주 사용됩니다.

create temp table a select * from xxx where ... 
create indexes on a ... 
create temp table b select * from xxx where ... 
create indexes on b ... 

select * from a 
union 
select * from b 

또는 하위 쿼리에서 3 개 이상의 수준을 피하기 위해.

select * 
from a where id in (select id 
        from b 
        where ... and id in (select id from c where)) 

는 IT가 내가 그들을 미리 정의 할 필요가 없습니다 올바른 필드 유형 및 이름을 제공 있으니까 매우 좋다 "등의 선택 테이블을 만듭니다."

내가 시뮬레이션 델파이와 파이어 버드에로 "로 테이블을 만들"수

만들기, 실행, 테이블 SQL을 생성하는 변환 테이블 필드 유형을 얻을 수없는 행이 선택하고 임시로 삽입 "확인 테이블 "+ 행을 가진 selectql (순서없이). 괜찮습니다.

그러나 select SQL을 가져 오는 공통 저장 프로 시저에서 동일한 작업을 생성하고 결과로 새로운 임시 테이블을 생성 할 수 있습니까?

그래서 쿼리 결과의 필드 형식을 필드 작성자 SQL에서 만들 수 있습니까?

나는 방법이 있는지 없는지 물어 보는 중입니다. 그런 다음 반드시 열을 지정해야합니다.

+0

'select * from rdb $ relation_fields where rdb $ relation_name = 'A''를 사용하여 열 정의를 얻은 다음 거기에서 계속할 수 있습니다. –

+0

하지만 결합 된 필드 (a.x, b.y ...를 선택하십시오.)로 할 수있는 작업은 무엇입니까? :-( – durumdara

+0

그리고 Create View .....를 선택하여 사용 하시겠습니까? – pf1957

답변

2

저장 프로 시저 내에서 DDL을 실행하는 것은 Firebird에서 지원되지 않습니다. EXECUTE STATEMENT을 사용하여 수행 할 수 있지만 권장되지 않습니다 ("No data returned"끝 부분의 경고 참조).

'임시 세트'를 사용하는 한 가지 방법은 (거래 수준) Global Temporary Table을 사용하는 것입니다. GTT를 데이터베이스의 일부로 만들지 만 올바른 데이터 유형을 갖지만 제한이없는 경우 (모든 컬럼이 아닌 일부 컬럼 만 채울 경우), 각 트랜잭션은 테이블과 데이터의 자체 버전만을 볼 수 있습니다.