2011-10-26 3 views
0

단일 명령문에 허용되는 최대 자리 표시 자의 수는 얼마입니까? 나는. 속성의 상한선 NUM_OF_PARAMS.Perl DBI 자리 표시 자의 최대 NUM_OF_PARAMS는 무엇입니까

$sth->{NUM_OF_PARAMS}이 음수가되기 때문에 최대 다중 행 삽입 수를 삽입하려고 시도하는 이상한 문제가 발생합니다. 즉, 20,000으로 설정하면 오류가 발생합니다.

최대 인서트를 5000으로 줄이는 것이 좋습니다.

감사합니다.

+0

질문이 맞는지는 모르겠지만 그 값을 알아야한다면 "print $ sth -> {NUM_OF_PARAMS};" ? – Arunmu

+0

@ArunMu : 내 질문에, 다른 말로하면 DBI가 허용하는 자리 표시 자 (?)의 수에 제한이 있습니까? 예를 들어, 단일 쿼리에서 10000 개의 물음표를 전달할 수 있습니까? – est

+3

DBI가 소스 코드에 부과 한 제한 사항이 없습니다. 한계가있는 경우를 찾는다면 데이터베이스의 DBD에서 한계에 부딪 힐 가능성이 있습니다. –

답변

1

필자가 알고있는 한, DBI의 유일한 한계는 값이 Perl 스칼라에 배치되어 그 안에 유지 될 수 있다는 것입니다. 그러나 DBD의 경우 완전히 다릅니다. 어떤 데이터베이스가 20000 개의 매개 변수를 지원한다면 나는 많은 것을 의심한다. BTW, NUM_OF_PARAMS은 읽기 전용이므로 "20,000으로 설정하십시오."라는 것이 무엇을 의미하는지 알지 못합니다. 20000 매개 변수가있는 SQL 문을 만든 다음 NUM_OF_PARAMS를 읽으면 음수 값을 갖게됩니다. 후자의 경우 rt.cpan.org에 (예를 들어)보고하는 것이 좋습니다.

20000 매개 변수가있는 SQL 문을 만드는 것이 모든 데이터베이스에서 매우 효율적이라고 생각합니다. 가능한 한 범위 나 그와 비슷한 것을 줄이고 시도하는 것이 좋습니다. ODBC에서 20000 개의 매개 변수는 20000 개의 IPD와 APD를 의미하며 상당히 큰 구조입니다. DB2 cli 라이브러리는 ODBC와 매우 흡사하기 때문에 많은 메모리를 차지할 것이라고 생각합니다.

0

20,000 원인 부정적인 문제와 5000가 부호있는 16 비트 정수 시스템 어딘가에, 그리고 상한 그러나 때문에 약 16383

이다,하지 않는 점을 감안, 한계는 기본 DBMS에 따라 달라집니다 및 DBMS (그리고 아마도 DBD 코드 자체)를 위해 DBD 모듈에 의해 사용 된 API; DBI의 영향을받지 않습니다.

문제를 해결하는 가장 좋은 방법이라고 확신하십니까?