올바른 GROUP BY 쿼리가 Oracle에서 INSERT INTO와 결합될 때 작동하지 않음
작업별로 구분/그룹화를 수행하는 삽입물을 작성하려고 합니다.쿼리는 선택 문으로 완벽하게 실행되지만 INSERT INTO로 감싸면 작동하지 않습니다.
INSERT INTO MasterRecords
(BatchRecordRecordID, SourceID, BatchID)
SELECT RecordID, SourceID, BatchID
FROM (
SELECT RecordID, BatchID, 101 AS SourceID
FROM BatchRecords
WHERE BatchID = 150
GROUP BY RecordID, BatchID
) BR
이것은 저에게 이득이 됩니다.
SQL 오류: ORA-00979: GROUP BY 식이 아닙니다.
그러나 INSERT INTO 코드만 제거하면 완벽하게 실행됩니다.
SELECT RecordID, SourceID, BatchID
FROM (
SELECT RecordID, BatchID, 101 AS SourceID
FROM BatchRecords
WHERE BatchID = 150
GROUP BY RecordID, BatchID
) BR
결과:
3 101 150
5 101 150
6 101 150
2 101 150
4 101 150
8 101 150
7 101 150
1 101 150
제 생각에 GROUP BY는 INSERT IN SELECT 문 안에서 허용되지 않지만 이를 확인하는 문서를 거의 찾을 수 없습니다.
비슷한 상황을 해결하기 위해 이곳에 도착했기 때문에 아직도 이런 문제가 발생하고 있는 것 같습니다.
제 경우, 최적화 도구의 변환을 피하는 것이 효과적이었습니다.
"intoed" SELECT 문에 NO_QUERY_Transformation 힌트를 적용했더니 오류가 사라졌습니다.
이 질문의 경우 다음과 같이 다시 작성해야 합니다.
INSERT INTO MasterRecords
(BatchRecordRecordID, SourceID, BatchID)
SELECT /*+NO_QUERY_TRANSFORMATION*/ RecordID, SourceID, BatchID
FROM (
SELECT RecordID, BatchID, 101 AS SourceID
FROM BatchRecords
WHERE BatchID = 150
GROUP BY RecordID, BatchID
) BR
제가 잘못 생각하고 있는 건가요, 하지만 아래의 sql은 당신이 성취하고자 하는 것과 같지 않나요?
INSERT INTO MasterRecords(BatchRecordRecordID, SourceID, BatchID)
SELECT DISTINCT RecordID, 101, 150
FROM BatchRecords
WHERE BatchID = 150
;
실행 명령 문제인지 궁금합니다.CTE를 사용하면 작동합니까?CTE가 먼저 구체화되어야 하며, 따라서 다음과 같이 그룹을 해결해야 합니다.
Insert INTO MasterRecords (BatchRecordRecordID, SourceID, BatchID)
WITH BR AS (
SELECT RecordID, 101 AS SourceID, 150 AS BatchID
FROM BatchRecords
GROUP BY RecordID, 101,150)
Select RecordID, SourceID, BatchID FROM BR
아니면... 애초에 그룹 바이 그리고 어디 조항이 기록 이후로 아무것도 하지 않는 것처럼 보이는 이유는 무엇입니까?ID가 집계가 아니며 그룹의 일부가 아닙니다.
마스터 레코드에 삽입(배치 레코드 레코드)ID, 원본 ID, 배치ID) 레코드 선택배치 레코드의 ID, 101, 150
이 문제는 매개 변수(optimizer_features_enable)의 값을 자동으로 변경하여 해결됩니다.이 값은 베이스의 최적화 도구 버전을 결정하며, 11은 해당 문제를 제공하지 않아야 합니다.
언급URL : https://stackoverflow.com/questions/28354248/valid-group-by-query-doesnt-work-when-combined-with-insert-into-on-oracle
'source' 카테고리의 다른 글
앵커 태그 내에서 제목 속성의 스타일을 변경하는 방법은 무엇입니까? (0) | 2023.08.14 |
---|---|
노드 앱을 실행할 때 bcrypt 잘못된 엘프 헤더 (0) | 2023.08.14 |
null 참조에 대해 런타임 바인딩을 수행할 수 없습니다. Excel 셀 비우기 (0) | 2023.08.14 |
도커 구성 Y를 시작하기 전에 컨테이너 X 대기 (0) | 2023.08.14 |
16진수 표현 문자열에서 토이() (0) | 2023.08.09 |