2010-01-10 3 views
2

Class::DBI과 같은 Perl ORM 패키지에 의해 생성 된 정확한 SQL 문을 찾고 싶습니다. 나는 이 아니다.은 간단한 삽입과 삭제를 위해 생성 된 SQL을 찾고 있지만 약간 복잡한 객체 조작 (부모 테이블의 행의 하위 인 테이블에 행 삽입)으로 인한 행 수정에 대한 것이다.Class :: DBI가 생성 한 SQL 문을 얻을 수 있습니까?

그것을 얻을 수있는 방법이 있습니까?

+0

왜 SQL을 가져 오시겠습니까? 일회성이라면 그렇게 어렵지 않습니다. 프로그램 내에서 계속해서 이것을하고 싶다면 조금 더 어렵습니다. –

+0

다음은 내가 염두에 두었던 것입니다. 두 데이터베이스를 동기화해야합니다. 이들 중 하나만 활성 데이터베이스입니다. 다른 하나는 활성화 된 사본을 보유합니다. 이 둘 사이의 연결이 항상 안정적으로 보장되는 것은 아니기 때문에 한 데이터베이스에서 생성 된 모든 SQL 문을 기록하고 파일로 수집하고 네트워크를 통해 파일을 전송하고 패시브 데이터베이스의 모든 트랜잭션을 단일 트랜잭션으로 실행하려고합니다. . 불행히도 내 통제 범위를 벗어난 이유 때문에 복제 도구 나 2 단계 커밋에 액세스 할 수 없어이 문제를 해결하는 가장 이상적인 방법입니다. –

답변

6

클래스 :: 당신이 환경 변수를 통해 모든 SQL 문 추적을 활성화 할 수 있도록 DBI는, 후드 DBI를 사용

use DBI; 
DBI->trace(2, 'dbi.log'); 
:

DBI_TRACE=3=dbi.log your-perl-script 

또는 펄의 내부의 문을 실행하기 전에

http://metacpan.org/pod/DBI#TRACING

+0

Thanks - 시도해 보았습니다. 매력처럼 작동 :) –

2

당신은 당신이 (a Class::DBI compatibility layer이있는) DBIx::Class를 사용하는 경우

... "과 같은"당신은 1-DBIC_TRACE 변수 환경을 설정할 수 있습니다 말했다입니다.

+0

DBI :: Profile은 유용 할 것이라고 생각합니다. 그러나 그것을 시험해 보지 않았고 ORMs에 대한 내 혐오는 저를 설득시키지 못했습니다 :) –

관련 문제