안녕하세요, 나는 조건에 따라 다른 열에 선택을 수행해야하는 문제가 있습니다. 나는 이것을 부정한 IF ELSIF 절로 저장 프로 시저에서 얻을 수 있지만 이것을 해결하는 가장 좋은 방법을 알고 싶습니다.오라클 PL/SQL - 조건에 따라 다른 열에서 select, group-by, order-by, where-clause를 수행하는 가장 좋은 방법은 무엇입니까?
PROCEDURE notSoSmartSelect(type IN VARCHAR, a_filter IN VARCHAR
, b_filter IN VARCHAR, results OUT SYS_REFCURSER) IS
BEGIN
IF type = 'A' THEN
OPEN results FOR
SELECT a, sum(val) v FROM sample_table
GROUP BY a, ORDER BY a;
ELSIF type = 'B' THEN
OPEN results FOR
SELECT b, a, sum(val) v FROM sample_table
WHERE a = a_filter
GROUP BY b, a, ORDER BY a, b;
ELSIF type = 'C' THEN
OPEN results FOR
SELECT c, b, a, sum(val) v FROM sample_table
WHERE a = a_filter AND b = b_filter
GROUP BY c, b, a, ORDER BY a, b, c;
END IF;
END;
당신이 발견 한 것처럼, 각각의 경우에 사용되는 테이블은 동일하지만 서로 다른 가져 오는 데 사용되는 열, 필터, 그룹 및 순서가있다 예를 들면 : 그것을 명확하게합니다.
위의 코드는 매우 단순 해 보이지만 실제로는 많은 분기가 있고 여러 개의 if-else가있어 코드가 매우 더럽습니다. 이것을 접근하는 우아하고 깨끗한 방법이 있습니까? 어쩌면 동적 SQL? 그러나 나는 이것을 위해 동적 인 SQL을 작성하는 가장 좋은 방법을 찾아내는 것 같다. 미리 감사드립니다.
나는 그런 식으로하고 싶지만 불행히도 약 50 만 건의 레코드가 있습니다 ... 데이터베이스에서 한 번에 많은 레코드를 가져 오는 데 너무 오래 걸리는 반면 where 절을 사용하는 쿼리는 약 60 레코드 만 반환합니다 . – Ocelot
그런데 불행히도 이것이 내가 생각할 수있는 유일한 접근법입니다. –