pl/sql 스터디의 일부로 가지고있는 과제는 원격 데이터베이스 연결을 생성하고 모든 테이블을 로컬에서 복사 한 다음, 참조 데이터, 내 견해 및 트리거 등등.오라클 - 저장 프로 시저를 원격 데이터베이스에 복사하기
아이디어는 리모트 쪽에서 뷰 등이 로컬 데이터베이스가 온라인 상태 인 경우 로컬 테이블을 참조해야하며, 그렇지 않은 경우 테이블을 참조해야한다는 아이디어가 있습니다. 원격 데이터베이스에 저장됩니다.
그래서 연결과 원격 끝에 테이블을 만드는 스크립트를 만들었습니다.
필자는 리모트 엔드에서 모든 뷰와 트리거를 생성하기 위해 pl/sql 블록을 만들었습니다. 로컬 데이터베이스에 대해 간단한 선택 쿼리를 실행하여 온라인인지, 온라인인지 확인한 후 일련의 즉시 실행 명령문은 table_name @ local을 참조하여 뷰 등을 만들고 온라인이 아닌 경우 블록은 예외 섹션으로 건너 뜁니다. 예외 섹션에서는 비슷한 일련의 execute immediate 문이 동일한 뷰를 생성하지만 원격 테이블을 참조합니다.
좋습니다. 그래서 여기가 확실하지 않게됩니다. 몇 가지 절차와 함수가 포함 된 패키지가 있는데 원격 대상에서이를 만드는 가장 좋은 방법은 무엇인지 모르기 때문에 참조 테이블을 가져 오는 위치와 비슷한 방식으로 동작합니다. .
보기에 대해했던 것과 같은 방식으로 '즉시 실행'내에 전체 패키지 생성 블록을 묶는 것일까? 아니면 두 개의 다른 패키지를 만들어서 pack1 및 pack1_remote와 같은 이름으로 호출해야합니까? ?
목표를 달성하는보다 효율적인 방법이 의심 스럽습니까?
건배!
로컬 데이터베이스 A와 원격 데이터베이스 B를 호출 해 봅시다. B에서 개체를 만들고 싶습니다. A가 온라인 인 경우 B의 개체가 A의 테이블을 참조하도록하고, 그렇지 않으면 B.에있는 물건은 정확합니까? 그렇다면 컴파일 시간에 그 결정을 내리려고합니까? 아니면 런타임에? 그것은 컴파일 시점에이 결정을하는 것이 거의 의미가 없기 때문에 그 시점은 단일 시점이므로 A가 그 시점에 작동하도록 보장 할 수 있습니다. 런타임에 선택을하면 잠재적으로 유용하지만 뷰 (다른 것들 중에서도)의 사용을 배제 할 수 있습니다. –
런타임에 결정을 내리려는 경우 시스템을 잘못 설계하고 있습니다. 데이터가 동기화되고 코드가 항상 로컬 객체를 참조 할 수 있도록 데이터베이스간에 복제를 작성하려고합니다. 그것은 훨씬 더 안정적이고,보다 성과가 높으며 유지 보수가 가능한 솔루션입니다. –
나는 Justin이 너에게 진실을 말할지 확신하지 못한다. 어쩌면 아이디어는 온라인/오프라인 테스트를 수행하는 스크립트가 사용자 세션 시작시 실행되어야한다는 것입니다. 자세한 내용은 없습니다.이것이 가장 튼튼한 접근 방식이 아닐 수도 있다는 사실에도 불구하고 스토어드 프로 시저/패키지에 대한 생각이 있습니까? – user3704497