중개 테이블 작성 및 삭제없이 프로 시저로 변환하려는 SQL 쿼리 세트가 있습니다. 아래에 샘플 쿼리를 포함 시켰습니다. 가장 좋은 방법은 무엇입니까? 절차가 처음이므로 그렇게하는 방법을 알려줄 수 있습니다.
커서를 사용하는 절차에서 커서를 사용할 수 있습니까? 쿼리의 마지막 줄에서 2 개의 중간 테이블을 조인합니다. 그 대신에 두 개의 커서를 결합 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까? 그렇게 할 방법이 있습니까? 제안 해주세요
master_copy에서 SELECT ID_LOAN으로 테이블 A를 작성하십시오 (ZERO_BAL_CODE IN (1)).
선택한 master_copy.ID_LOAN, LOAN_AGE, master_copy.vintage, DELINQ_STATUS, ZERO_BAL_CODE, master_copy.ACTUAL_LOSS, current_upb FROM master_copy INNER JOIN A ON master_copy.ID_LOAN = A.ID_LOAN;
CREATE TABLE prepaidData AS SELECT ID_LOAN, max (to_number (DELINQ_STATUS))를 DELINQ_STATUS로, max (loan_age) AS LOAN_AGE, max (ZERO_BAL_CODE)를 ZERO_BAL_CODE, max (vintage)를 빈티지로, id_loan에 의한 current_upb로부터 FROM B 그룹으로서 min (ACTUAL_LOSS)를 actual_loss로서, MIN (NULLIF (current_upb, 0)); 테이블 선불 데이터 변경 loan_type varchar2 (255) 기본 '선불'추가;
드롭 테이블 a; 드롭 테이블 b;master_copy에서 SELECT ID_LOAN으로 표 A 만들기 (ZERO_BAL_CODE IN (3));
선택한 master_copy.ID_LOAN, LOAN_AGE, master_copy.vintage, DELINQ_STATUS, ZERO_BAL_CODE, master_copy.ACTUAL_LOSS, current_upb FROM master_copy INNER JOIN A ON master_copy.ID_LOAN = A.ID_LOAN;
CREATE TABLE DEFAULT_FORECLOSURE AS SELECT ID_LOAN, max (to_number (DELINQ_STATUS)) as DELINQ_STATUS, max (loan_age) AS LOAN_AGE, max (ZERO_BAL_CODE) as ZERO_BAL_CODE, max (vintage) 빈티지, id_loan에 의한 current_upb로부터 FROM B 그룹으로서 min (ACTUAL_LOSS)를 actual_loss로서, MIN (NULLIF (current_upb, 0)); DEFAULT_FORECLOSURE 테이블 변경 loan_type 추가 varchar2 (255) 기본 'default_foreclosure';
드롭 테이블 a; 드롭 테이블 b;aa_loan_type 테이블을 다음과 같이 작성하십시오 (prepaiddata union select * * DEFAULT_FORECLOSURE에서 select *);
- 답변 # 1
관련 자료
- Rust에서 가능하면 Rc와 RefCell을 사용하지 않아야합니까?
- kotlin - 중복 된 else 분기를 어떻게 피할 수 있습니까?
- postgresql - 함수에서 임시 테이블 생성 및 삭제를 방지하는 방법은 무엇입니까?
- arrays - PC가 같은 번호를 선택하지 않도록하려면 어떻게해야합니까?
- database - 두 개의 테이블로 '찾기 및 바꾸기'를 수행하는 SQL 쿼리를 작성할 수 있습니까?
- oracle - sql - 두 테이블의 가능한 모든 관계를 출력 하시겠습니까?
- ruby on rails - 하나의 컨트롤러 내에서 두 개의 서로 다른 테이블에 데이터를 삽입 할 수 있습니까?
- django models - 장고 모델 - 데이터베이스 디자인에서 가능한 순환 참조를 피하십시오
- scala - UUID가 유효하지 않음을 나타낼 수있는 기본 UUID 값을 가질 수 있습니까?
- graphql - GraphQLList를 사용하여 여러 테이블에서 데이터를 가져올 수 있습니까?
- oracle : Max Val 기능이 제대로 작동하지 않음 내가 잘못하고있는 것일 수 있습니다.
- oracle - 인덱스를 다른 TableSpace로 이동하는 방법
- java - SQLException : Oracle의 프로토콜 위반
- Oracle SQL의 계산 열에서 10 진수 값을 10 진수가 아닌 값으로 변환
- sql - Oracle에서 데이터 손실없이 파티션을 삭제할 수 있습니까?
- sql - 학생 ID 별 월별 출석 수 찾기 쿼리
- sql - Oracle의 미리 정의 된 이메일 ID 목록에 SELECT 쿼리의 출력을 메일로 보내는 방법이 있습니까?
- Oracle 트리거 내에서 여러 삽입 및 업데이트 문 실행
- OracleDB 프로토콜에 대한 사양이 있습니까?
- Oracle : where 절을 사용하는 업데이트 명령은 대소 문자를 구분합니까?
중간 테이블을 피하는 가장 좋은 방법은 인라인 뷰를 사용하는 것입니다. 다음과 같은 하나의 SQL 문으로 쿼리를 다시 작성할 수 있습니다.
정확하게 구축되면 하나의 큰 SQL 문이 여러 개의 작은 SQL 문보다 훨씬 낫습니다. 전체 코드는 더 간단하고 (객체가 적고, IDE에서 디버깅하기가 더 쉬워) 잠재적으로 훨씬 빠릅니다 (데이터를 작성할 필요가없고 옵티마이 저가 더 영리한 일을 할 수있는 기회를 제공합니다)
대규모 SQL을 "정확하게"구축하는 것은 주관적이지만 각 인라인 뷰를 미니어처 프로그램으로 취급하는 것으로 요약됩니다.
<올>각 인라인보기를 단순하게 유지하고 간단한 단계로 결합한 후 반복하십시오.
인라인보기마다 적절한 이름과 주석을 사용하십시오. "A"와 "B"보다 더 나은 것을 원할 것입니다.
각 줄에 괄호를 사용하여 Allman 스타일의 대괄호를 사용하십시오. 인라인보기는 중요하며 추가 공백과 정렬 된 괄호가 필요합니다. 초보자 개발자를 제외하고
SELECT
와 같은 키워드를 정렬 할 필요가 없습니다. 그리고FROM
. 각 인라인 뷰의 괄호와 같은 중요한 경계를 정렬해야합니다. IDE에서 코드를 빠르게 강조 표시하고 실행하여 디버깅하는 데 도움이됩니다.상관 된 서브 쿼리 또는 공통 테이블 표현식 대신 인라인 뷰를 사용하여 서브 쿼리 인터페이스를 단순하게 유지하십시오. 인라인보기의 장점은 단순성입니다. 관계형 데이터, 관계형 데이터입니다.