Oracle 데이터베이스의 일부 임시 테이블에서 테이블에 데이터를 삽입하는 저장 프로 시저가 있습니다. 특정 검사를 기반으로 동일한 테이블의 플래그를 업데이트하는 삽입 후 update 문이 있습니다. 스토어드 프로 시저가 끝나면 커밋이 발생합니다. 문제는 업데이트가 95 %의 경우에 작동하지만 일부 경우 업데이트가 실패한다는 것입니다. 우리는 아무 것도 바꾸지 않고 다시 실행하려고 할 때 작동합니다. 심지어 다른 시간에 동일한 데이터에 대해 동일한 저장 프로 시저를 실행하려고해도 완벽하게 작동합니다. 저장 프로 시저의 논리에서 문제를 발견하지 못했습니다. 우리가 찾을 수없는 데이터베이스 수준의 문제가 있다고 생각합니다. (아마도 동시성과 관련이 있습니다). 이것에 대한 아이디어는 매우 도움이 될 것입니다.Oracle - 저장 프로 시저의 업데이트 문이 한 번 작동하지 않습니다
0
A
답변
0
소스 코드를 보지 않고 우리는 단지 추측 할 것입니다. 생각할 수있는 가장 확실한 제안은 어떤 경우에는 예외가 발생하고 커밋까지는 도달하지 않는다는 것입니다. 또 다른 가능성은 실행 중에 실패 할 때 테이블에 잠금이 있다는 것입니다.
아마도 더 자세히 조사해 보려면 예외를 일부 테이블이나 파일에 쓰고 오류가 발생한 것을 확인하는 예외 처리기를 추가하는 것이 가장 좋습니다.
-- create a logging table
create table tmp_error_log (timestamp timestamp(0), Error_test varchar2(1000));
-- add a variable to your procedure declaration
v_sql varchar2(1000);
-- add an exception handler just before the final end; statement on your procedure
exception
when others then
begin
v_sql := 'insert into tmp_error_log values(''' ||
to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') || ''', ''' || SQLERRM || ''')';
dbms_output.put_line(v_sql);
execute immediate v_sql;
commit;
end;
-- see what you get in the table
select * from tmp_error_log;
관련 문제
- 1. mysql 프로 시저의 업데이트 문이 작동하지 않습니다.
- 2. 저장 프로 시저 업데이트 문이 작동하지 않습니다.
- 3. Oracle 저장 프로 시저의 프롬프트
- 4. Oracle 저장 프로 시저의 오류
- 5. 저장 프로 시저의 업데이트 문제
- 6. 저장 프로 시저의 CTE가 작동하지 않습니다.
- 7. Oracle 저장 프로 시저의 ASP.NET DataSet
- 8. oracle SQL 저장 프로 시저의 컴파일 오류
- 9. MySQL 업데이트 문이 저장 프로 시저에서 작동하지 않습니다.
- 10. oracle 저장 프로 시저의 핸들 및 기호
- 11. oracle 저장 프로 시저의 디렉토리에서 파일 삭제
- 12. 저장 프로 시저의 시스템 카탈로그 업데이트
- 13. 저장 프로 시저의 대안
- 14. 업데이트 쿼리에서 저장 프로 시저의 결과 사용
- 15. 저장 프로 시저의 배열 데이터 업데이트
- 16. 저장 프로 시저의 executeScalar
- 17. 저장 프로 시저의 SqlBulkCopy
- 18. Oracle 프로 시저의 오류입니다. 개체가 유효하지 않습니다.
- 19. 저장 프로 시저의 예외 처리
- 20. 저장 프로 시저의 SELECT 문이 행을 반환하는지 확인합니다.
- 21. 저장 프로 시저의 결과가 작동하지 않는 곳
- 22. 저장 프로 시저의 트랜잭션
- 23. 저장 프로 시저의 형식
- 24. 저장 프로 시저의 오류
- 25. 저장 프로 시저의 오류
- 26. 저장 프로 시저의 진행
- 27. 저장 프로 시저의 오류
- 28. 저장 프로 시저의 문제
- 29. 저장 프로 시저의 Datepart
- 30. 저장 프로 시저의 이름
데이터베이스의 동시성은 두 개의 검입니다. Chris가 지적했듯이 오류를 기록하는 절차에 예외를 추가하면 확실히 도움이됩니다. 다중 사용자 환경을 개발할 때 필요한 몇 가지 사항이 있습니다. [분실 된 업데이트] (http://tkyte.blogspot.com/2005/08/something-different-part-i-if-iii.html) 문제가 발생할 수 있습니다. – abhi