시퀀스가 있으면 어떤 table.column이 값을 가져올 지 알아야합니다. 내가 아는 한, 오라클은이 관계를 추적하지 않습니다. 따라서 소스 코드에서 시퀀스를 찾는 것이 유일한 방법입니다. 그게 맞습니까?시퀀스를 사용하는 Oracle 테이블은 무엇입니까?
누구나이 시퀀스 - 테이블 관계를 알아낼 수있는 방법을 알고 있습니까?
시퀀스가 있으면 어떤 table.column이 값을 가져올 지 알아야합니다. 내가 아는 한, 오라클은이 관계를 추적하지 않습니다. 따라서 소스 코드에서 시퀀스를 찾는 것이 유일한 방법입니다. 그게 맞습니까?시퀀스를 사용하는 Oracle 테이블은 무엇입니까?
누구나이 시퀀스 - 테이블 관계를 알아낼 수있는 방법을 알고 있습니까?
찾고있는 사람이이 같은 스키마에 저장된 모든 코드를 검색 할 수있는 myseq -
"MYSEQ 선택. 이중에서 NEXTVAL FROM"과 같은 사례는 처리하지 않습니다. – jva
사실, 항상 텍스트 검색에 문제가 있습니다. '% MYSEQ %. % NEXTVAL %'을 (를) 사용할 수 있지만 'MYSEQ2.NEXTVAL'과 같은 항목에 대해 오탐을 유발할 수 있습니다. 그 쉬운 대답은 없습니다! –
사용 GREP은 "myseq.NextVal"에 대한 전체 소스를 스캔
select type, name, line, text
from all_source
where owner = 'MYSCHEMA'
and upper(text) like '%MYSEQ.NEXTVAL%';
SQL Developer에는이를 수행하는 보고서가 있습니다.
그건 내 접근 방식이되어 왔습니다. 'grep -Prine "myseq \." 전체 코드베이스에서. " 문제는 사람들이 버전 제어하에 모든 코드를 가지고 있지 않다는 것입니다. 나는 많은 코드 (절차)가 데이터베이스에만 저장되어 있다고 생각한다. – mcrisc
DB에 저장된 코드 만 참조 할 수 있다면'ALL_SOURCE'를 시도해보십시오. 10g이면'REGEXP_LIKE' 함수를 사용하여 검색합니다. – Guru
@ 구루 9i입니다. 하지만 어쨌든'REGEX_LIKE'에 대해 알고있는 것이 좋습니다. 감사. – mcrisc
오라클은 한 시퀀스를 사용하여 여러 테이블의 열을 채울 수 있습니다. 이것이 바람직 할 수있는 시나리오는 수퍼 타입 / 서브 타입 구현을 포함한다.
데이터 딕셔너리의 종속성을 사용하여 관계를 식별 할 수 있습니다. 당신이 값을 할당 트리거를 사용하는 경우 예를 들어,이 쿼리는 당신을 도울 것입니다 : 당신은 PL/SQL을 사용하는 경우
select ut.table_name
, ud.referenced_name as sequence_name
from user_dependencies ud
join user_triggers ut on (ut.trigger_name = ud.name)
where ud.type='TRIGGER'
and ud.referenced_type='SEQUENCE'
/
은 다음 TYPE in ('PACKAGE BODY', 'PROCEDURE', 'FUNCTION')
비슷한 무언가를 쓸 수 있습니다, 당신은 여전히 소스를 통해 일부 트롤 어업을 필요로하지만, 여러 개의 히트가있을 때 테이블과 시퀀스를 할당하는 코드.
sequence_name이 있고 트리거를 통해 사용중인 테이블을 확인하려면 위의 쿼리에 시퀀스 이름을 지정하는 하나 이상의 "and"조건을 사용할 수 있습니다. select ut.table_name , ud.referenced_name as sequence_name from user_dependencies ud user_triggers ut on (ut.trigger_name = ud.name) ud.type = 'TRIGGER' 및 ud.referenced_type = 'SEQUENCE' 및 ud.referenced_name = 'YOUR_SEQ_NAME'; – nanosoft
시퀀스에 대한 정보를 background에 추가하고 싶습니다.
오라클은 관례에 의한 경우를 제외하고 그러한 관계가 없으므로 추적하지 않습니다. 이것이 일반적으로 일종의 명명 규칙을 사용하는 이유입니다. 테이블 XYZ에는 시퀀스 SEQ_XYZ가 있습니다. –