Perl과 DBI (SQLite yay!)에 작은 스 니펫을 작성했습니다.Perl의 DBI를 사용하여 SQL 쿼리에서 테이블 이름을 가져올 수 있습니까?
쿼리가 실행되는 테이블 이름과 동일한 파일 이름의 텍스트 파일에 특정 쿼리를 기록하고 싶습니다 . 가는 대신 물건, 내가 효과적으로 원하는 것은
dumpResultsToFile (<<" END_SQL");
SELECT TADA.fileName, TADA.labelName
FROM TADA
END_SQL
:
여기sub dumpResultsToFile {
my ($query) = @_;
# Prepare and execute the query
my $sth = $dbh->prepare($query);
$sth->execute();
# Open the output file
open FILE, ">results.txt" or die "Can't open results output file: $!";
# Dump the formatted results to the file
$sth->dump_results(80, "\n", ", ", \*FILE);
# Close the output file
close FILE or die "Error closing result file: $!\n";
}
내가이 전화를 할 수있는 방법입니다 : 여기
내가 텍스트 파일로 결과를 덤프하기 위해 사용하는 코드입니다 "results.txt"(위에 하드 코딩 된), 이제 "TADA.txt"로 이동합니다. 이는 테이블 사이에 "HAI"및 "LOL"다음 결과 집합을 "HAI.LOL.txt"작성해야 가입 나는 DBI의 마법을 사용하는 경우에도 가능 말하고 무엇인가 있었다면 ?
는 차라리 테이블에 대한 SQL 쿼리를 구문 분석없이 할 것입니다,하지만 SQL 쿼리 소스 테이블 이름을 잡기 위해 널리 사용되는 및 디버깅 기능이있는 경우, 그 역시 나를 위해 작동합니다.
내가 원하는 것은 파일명이 인 것일뿐 어떤 결과가 나오는지에 대한 힌트가 있습니다. 출력 결과가 아닙니다. 테이블 이름을 기반으로하는 세그레게이션은 지금 좋은 방법입니다.
SQL :: Abstract에 대한 제안이 매우 좋습니다! – PoorLuzer
.. 내가 묻는 것은 : DBI 문 핸들에서 소스 테이블 이름을 가져올 방법이없는 것입니까? (준비 등으로 반환 된 핸들) – PoorLuzer
@ PoorLuzer : 정보를 얻는 방법이 있을지 몰라도, 누군가가 추천 할만한 것은 아닙니다. 'prepare' 문은 아마도 데이터베이스 드라이버의 일부인 C 루틴을 호출하고 쿼리를 해당 데이터베이스의 내부 형식으로 변환 할 것입니다. 어떻게 든 정보를 다시 가져 오는 것은 가능해야하지만, 다른 선택의 여지가 없다면 갈 방법이 아닙니다 (예 : 다른 곳에서 제공되는'prepare'd 쿼리). –