저는 Perl 프로그래밍을 처음 접했을뿐 아니라 제 질문이 잘못된 방식으로 공식화 될 수도 있지만 실제로 많은 것을 읽었습니다. 도서 및 자습서와 내 문제를 언급 (심지어 언급) 아무것도 찾지 못했습니다.Perl SQLite 오류 처리 : 오류 코드에 따라 다른 작업 수행
DBI 및 SQLite를 사용하여 복구 할 수있는 오류 (DB가 꽉 찼거나 잠긴 경우 등)가 발생하면 삽입 쿼리를 다시 시도하는 코드를 작성하려고하지만 오류를 복구 할 수없는 경우 죽습니다 (DB가 삭제되거나 손상되거나, 기타.).
나는 SQLite는 C 인터페이스는 오류 코드를 수출 것으로 나타났습니다 :
http://www.sqlite.org/c3ref/c_abort.html
하지만 난 펄 비슷한 아무것도 발견하지 않았습니다. 첫 번째 Perl 프로그램에서 매직 넘버를 사용할 필요가 없다면 정말 좋겠다. :-)
그런데, 내가 본 온라인 문서와 예제는 DBI에서 자동 (즉 예외가있는) 오류 처리를 아주 잘 설명하지만 오류에 따라 다른 작업을 수행하는 방법을 보여주지는 못합니다 유형. 일반적인 사용 사례가 아닌가?
또한 DBI :: err은 어떤 오류가 발생했는지 알 수있는 올바른 변수가 아닙니다. 그들은 DBI :: errstr이 사용되어야한다고 암묵적으로 말합니다.하지만 인간 지향적 인, 아마도 여러 줄의 에러 문자열에 대한 문자열 비교에 의존하는 것은 다소 어색합니다.
감사합니다. 암시!
대부분의 응용 프로그램에서 모든 데이터베이스 오류는 치명적인 것으로 간주됩니다. – jordanm
[DBI] (http://search.cpan.org/~timb/DBI-1.625/DBI.pm#errstr)는 반대입니다 : "errstr() 메서드를 사용하여 오류를 테스트해서는 안되며 err () 왜냐하면 드라이버는 '실패'가 아닌 메소드에 대해 errstr()을 통해 '정보가있는 성공'또는 경고 메시지를 반환 할 수 있기 때문입니다. " – charlesbridge
@charlesbridge 오류가 있는지를 검사하기 위해 err()을 사용하지만 어떤 종류의 오류가 발생했는지는 알려주지 않습니다. 일부 드라이버의 경우 오류는 -1이됩니다. 이 사실을 DBD :: SQLite, 따라서 내 질문에 대한 것 : err() 비교하는 기호 상수가 있습니까? – David