2012-07-27 3 views
4

TStoredProc ExecProc 호출에서 params의 수 또는 params의 전체 크기에 제한이 있습니까?TStoredProc의 매개 변수 수에 제한이 있습니까?

현재 BDE를 사용하여 Oracle에 연결하고 최근 패키지 변경 절차에 대한 매개 변수 수를 변경 한 시스템이 실행되어 액세스 위반이 발생했습니다. 이제 매개 변수 수는 최대 291 개이며 AV는 TStoredProc의 ExecProc 호출에서 만들어집니다.

목록에서 단일 매개 변수를 제거하면 (모든 매개 변수가 특정 매개 변수 일 필요는 없습니다) ExecProc 호출이 올바르게 작동합니다.

코드를 통해 디버깅했으며 DBTables.pas 내의 TStoredProc.BindParams 프로 시저를 사용하여 액세스 위반이 발생했습니다. 몇 가지 시계를 설정했는데 그 중 하나가 SizeOf (FRecordBuffer)이고이 절차를 단계별로 수행하면 값은 65535입니다.이 값은 MaxWord (Windows.pas)입니다. DBTables 코드 내에 지정된 제한이 표시되지 않습니다.

호출 스택은 TStoredProd.ExecProc -> TStoredProc.CreateCursor -> TStoredProc.GetCursor -> TStoredProc.BindParams이며 FParams를 반복하는 for 루프에서 액세스 위반이 throw됩니다.

미리 감사 드리며, 우리는 우리가 명확하게 조종 할 수 있도록 할 수있는 것을 찾아야합니다.

+1

Woohoo, 저장 프로 시저에 291 개의 매개 변수가 있습니까? 너 몇 가지를 놓치지 않아? – TLama

+1

예,이 일을 쓰지는 않았지만 유지해야합니다. (> _ <) –

+1

> * "DBTables 코드 내에서 지정된 제한이 보이지 않습니다."* 'FRecordSize'/ 'FRecBufSize'와 같이 DBTables에서 사용되는 다양한 Word가 있습니다. 개발자는 'Word'가 디자인의 일부분으로 충분해야한다고 생각했습니다. –

답변

0

나는 오라클 SQL에 정통한 것은 아니지만, 당신이 그 일을 유지하고 있기 때문에 모든 매개 변수를 가진 호출을 새로운 전용 테이블에 삽입 할 수 있는지를 볼 수 있습니다. 열 및 자 동 번호 기본 키)를 저장하고이 키를 입력으로 사용하도록 저장 프로 시저를 변경하고이 새 레코드의 값을 호출하여 해당 작업을 수행합니다. 이것은 매개 변수의 최대 개수를 알아 내고 거기에서 수정을 찾으려고 시도하는 것보다 조금 더 빨리 전달할 수 있습니다. (비록 2의 거듭 제곱이 아닌 이상한 숫자이지만 291 일 수도 있습니다 ...)

+0

및 삽입 후 트리거에서 자동 호출 SP :-D –

관련 문제