Oracle이 WITH 절에 alias_name이 동일한 하위 쿼리를 여러 개 허용하는 이유는 무엇입니까?
약간 웃기게 보이지만 Oracle 11g는 실제로 그러한 쿼리를 실행할 수 있습니다.
with
a as (select 1 from dual),
a as (select 2 from dual)
select *
from a;
첫 번째 하위 쿼리(예: 1)의 결과를 반환합니다.
저는 그런 기능이 유용할 수 있는 상황을 상상할 수 없습니다.이 경우 하위 쿼리를 복사/붙여넣은 후 이름을 바꾸는 것을 잊어버리고 전체 쿼리가 잘못된/예상치 못한 결과를 반환하는 경우 문제가 발생했습니다.다행히 쿼리는 매우 간단했고 그 이유는 즉시 감지되었습니다.
어쨌든, 저는 Oracle이 이러한 경우에는 예외를 둘 것으로 예상합니다.
그래서, 제 질문은 그러한 행동이 특징인지 아니면 버그인지입니다.기능이 있다면 어디에서 유용할 수 있습니까?
감사해요.
그런데 SQLite에서는 유사한 쿼리를 실행할 수 없으며 '테이블 이름이 있는 복제' 예외를 발생시킵니다.다른 DB 엔진은 아직 시도하지 않았습니다.
WITH 절은 함수와 함께 사용할 수도 있습니다.이것이 11g과 함께 사용할 수 있었는지는 모르겠지만 12c와 함께 사용할 수 있습니다.따라서 이 "버그"는 과부하 기능에 필요할 수 있습니다.
예를 들어, 이 절차에서는 동일한 입력/출력 데이터 유형으로 동일한 기능을 두 번 사용합니다.
WITH
FUNCTION get_date(pid IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN 'date is '|| pid;
END;
FUNCTION get_date(pid IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN 'date is '|| pid;
END;
SELECT get_date(cast(sysdate as varchar2(20)))
FROM dual
;
/
예상대로 다음 오류가 반환됩니다.
ORA-06553: PLS-305: previous use of 'GET_DATE' (at line 1) conflicts with this use
그러나 함수를 오버로드하여 이름은 같지만 매개 변수 유형이 다를 경우 작동합니다.이 절차는 오류 없이 실행되며 변수 데이터 유형에 따라 올바른 기능이 사용됩니다.
WITH
FUNCTION get_date(pid IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN 'date is '|| pid;
END;
FUNCTION get_date(pid IN DATE) RETURN VARCHAR2 IS
BEGIN
RETURN pid+1;
END;
SELECT
get_date(cast(sysdate as varchar2(20))) /*example1*/
--get_date(sysdate) /*example2*/
FROM dual
;
/
예 1 출력:date is 16-MAR-17
예 2 출력:17-MAR-17
따라서 동일한 이름의 하위 쿼리를 사용할 수 있다는 것은 오버로드된 함수를 허용하는 것과 관련이 있을 수 있습니다.아직 버그가 있는 것 같고 문서를 찾을 수가 없습니다.
유용하지는 않지만 오라클이 중복 열 이름을 처리하는 방식과 일치합니다.
언급URL : https://stackoverflow.com/questions/39525004/why-does-oracle-allow-having-several-subqueries-with-the-same-alias-name-in-a-wi
'programing' 카테고리의 다른 글
SQL로 크리스마스 트리를 인쇄하려면 어떻게 해야 합니까? (0) | 2023.07.20 |
---|---|
명령 프롬프트에서 SELECT 쿼리의 출력을 어떻게 확인합니까? (0) | 2023.07.20 |
오라클의 클라이언트와 cx_Oracle을 설치하지 않고 오라클 db에 액세스하려면 어떻게 해야 합니까? (0) | 2023.07.20 |
Intellij IDEA에서 인메모리 h2 데이터베이스에 액세스하는 방법 (0) | 2023.07.20 |
테이블이 돌연변이 중이므로 트리거/기능이 이를 보지 못할 수 있습니다(평균 기울기가 2.5 미만으로 떨어지는 것을 방지). (0) | 2023.07.20 |