2014-03-12 2 views
0

현재 Oracle 9g를 사용 중이며 상당히 새로운 패키지를 작성하고 있습니다. 패키지에 외부 테이블의 테이블에 데이터를로드하는 절차가 있습니다. 이 테이블을 먼저 삭제하고 외부 테이블에서 일부 변환을 사용하여 테이블을 다시 작성한 다음 인덱스를 작성합니다. 나는 인덱스와 데이터에 대한 약간의 변경이 필요하기 때문에 외부 테이블을 참조 할 수 없다.테이블이 존재하지 않을 때 오라클 패키지 오류가 발생합니다.

그런 다음이 임시 테이블을 참조하는 패키지에서 나중에 다른 작업을 수행해야합니다. 순서대로 프로 시저를 실행할 때 표를 생성하는 프로 시저가 프로 시저를 삭제 한 후 프로 시저를 작성하기 전에 중단되면 예외는 아닙니다.

아니요 패키지 본문을 변경하면 해당 테이블을 참조하는 이후 절차에서 오류가 발생하여 컴파일되므로 테이블이 존재하지 않는다고 알려줍니다. 또한이 유효성 검증 오류로 인해 프로 시저를 실행할 수 없습니다.

모범 사례에 대해 조언하거나 이러한 검증 오류가 발생하지 않는 한 최선의 방법을 알려줄 수 있습니까? 아니면 어떻게 든이 유효성 검사를 끌 수있는 방법이 있습니까?

많은 감사, 댄

+2

왜 외부 테이블을 삭제하고 다시 만들어야합니까? 파일 이름 만 변경 하시겠습니까? 아니면 외부 테이블의 구조가 변경됩니까? –

+0

글쎄 그 대신자를 수 있다고 생각합니다. 나는 프로 시저에서 create 문을 수정하고 실행하게하고 테이블을 작성하는 것이 주로 여분의 문을 작성하지 않고 존재하지 않으면 테이블을 나중에 쉽게 수정하도록 테이블을 삭제하고 다시 작성하기로했습니다. 암호. 나는 이것을 잘린 것으로 바꾸는 것을 생각했지만, 내 자신의 훈련을 위해서, 그것을 떨어 뜨리고 재창조하는 동안 이것을 할 수있는 방법이 있는지 궁금합니다. – ScubaManDan

+1

테이블을 삭제할 때 패키지가 유효하지 않지만 유효하지 않은 패키지를 사용하려는 첫 번째 시도는 시스템에서 해당 패키지를 다시 컴파일하려고 시도하고 성공할 경우 호출이 진행되도록 허용해야합니다. 패키지 된 루틴이 다른 PL/SQL 모듈 또는 프로그램에서 호출 된 경우에만 발생합니다. OCI/ODBC /를 통해 호출 된 경우 호출이 실패합니다. 일반적으로 테이블을 삭제하고 다시 작성하는 것은 나쁜 관행인데, IMO는 문제를 일으 킵니다. 원한다면이 작업을 수행 할 수 있습니다. 그러나 보시다시피, 모든 것이 눈물로 끝날 것입니다! :-) 공유하고 즐기십시오. –

답변

1

이 개 패키지를 확인합니다. 하나는 테이블을 삭제하고 데이터 조작 코드로 다른 테이블을 만듭니다. 두 번째 패키지는 일단 테이블을 삭제하면 무효화되지만 첫 번째 패키지는 계속 사용할 수 있습니다.

+0

흠, 네. 그런 다음 두 번째 파일이 실패하기 시작하면 첫 번째 파일을 실행하면 문제가 해결됩니다. 그래도 수치. 나는 당신이 스크립트에 확신을 갖게되면 검증 체크를 실행하지 않을 방법이 없다. – ScubaManDan

+0

이 경우 동적 SQL이 유용합니다.그러나 당신은 어떤 이유로 그것을 원하지 않는 것 같습니다. – Rene

+0

실제로 동적 SQL을 사용하고 있습니다. create 문을 매개 변수로 전달하고 동적 문으로 실행합니다. 위에 제시 한 내용이이 경우 최상의 방법 일 수 있습니다. 감사합니다. 르네. – ScubaManDan

관련 문제