최근 개발 한 데이터베이스 중 하나를 Oracle 계정에서 LDAP 로그인 계정으로 변경했으며 시스템에 액세스하는 직원이 사용하는 프런트 엔드에 모두 적합했습니다. 그러나 데이터베이스에 데이터를로드하는 admin staff로 제한된 두 번째 항목 방법이 있으며 dbms_scheduler를 사용하여 많은 처리가 호출됩니다.오라클 글로벌 임시 테이블과 스토어드 프로 시저 및 함수 사용
대부분의 데이터베이스 테이블에는 created_by 열이 있습니다.이 열은 sys_context에서 사용자 이름을 가져 오는 기본값이지만 dbms_scheduler에서 데이터로드가 실행될 때이 정보를 사용할 수 없으므로 created_by 열은 모두 APP_GLOBAL로 채워집니다.
전역 임시 테이블 (GTT)에 sys_context 값을 채우고이 값을 사용하여 db_scheduler라는 저장 프로 시저에서 created_by를 채 웁니다. 따라서 다음 논리적 단계는이를 함수에 넣고 호출하는 것입니다. 시스템 전반에 걸쳐 사용될 수 있거나 심지어 삽입 트리거 이전에 참조 될 수도 있습니다.
문제는 코드를 함수에 넣을 때 GTT의 데이터를 찾을 수 없다는 것입니다. 테이블은 행을 보존하도록 설정됩니다.
많은 사이트를 트롤링했지만 답변을 구할 수있는 사람이 아무도 없었습니다.
Jack, 저는 dbms_scheduler와 동일한 세션을 위해 GTT를 채우고 선택할 수 있습니다. 모든 저장 프로 시저가 스케줄러에서 실행하여 참조 할 수 있도록 코드를 함수에 넣었지만 함수를 참조 할 때 GTT의 데이터가 반환되지 않습니다. created_by에 대한 가정은 거의 정확합니다. 표현식은 열의 기본값이며 트리거가 아닙니다. – Colin
@Colin 죄송합니다 - 트리거에 대한 참조는 오타입니다 –
@Colin 스케줄러가 실행하는 각 작업마다 다른 세션을 사용합니다 –