where
절의 많은 부분에 대해 바인드 변수를 사용할 수는 없으며 SQL * Plus 또는 SQL Developer에서이 변수를 사용하는 경우 대체 변수를 사용할 수 있습니다 (어쩌면 일부). 다른 고객) :
define condition = 'column 1 = 1 AND column2 = 2, etc.'
Select a.content, b.content
from
(Select (DBMS_LOB.SUBSTR(ost_bama_vrij_veld.inhoud,3)) as content
from table_name
where category = X AND &condition
...
Fro JDBC와 OCI를 포함한 다른 곳에서는 조건을 변수로 사용하고이를 사용하여 쿼리 문자열을 작성해야하므로 파서가 보는 코드에서 반복됩니다. PL/SQL에서 동적 SQL을 사용하여 동일한 결과를 얻을 수 있습니다. 조건을 반복하는 것이 왜 문제가되는지 모르겠다. 값이 바뀌면 인수를 바인딩해야한다. 분명히이 두 절을 사용하면 약간의 무의미한 것처럼 보입니다.
하지만 다른 각도에서 접근하여 where
절을 반복해야 할 필요는 없습니다. 테이블을 두 번 쿼리하면 어쨌든 효율적이지 않을 수 있습니다. 당신은 하위 쿼리로 한 번 조건을 적용 할 수 있지만 인덱스 또는 조건의 선택성을 모른 채이 악화 될 수있다 :
with sub_table as (
select category, content
from my_table
where category in (X, Y)
and column 1 = 1 AND column2 = 2, etc.
)
Select a.content, b.content
from
(Select (DBMS_LOB.SUBSTR(ost_bama_vrij_veld.inhoud,3)) as content
from sub_table
where category = X
group by (DBMS_LOB.SUBSTR(ost_bama_vrij_veld.inhoud,3))
) A
,
(Select (DBMS_LOB.SUBSTR(ost_bama_vrij_veld.inhoud,100)) as content
from sub_table
where category = Y
group by (DBMS_LOB.SUBSTR(ost_bama_vrij_veld.inhoud,100))) B
GROUP BY
a.content, b.content
내가 그룹화가 무엇인지 잘 모르겠어요 - 중복을 제거하는? 다른 조건과 일치하는 단일 X 및 Y 레코드가있는 경우에만이 방법이 적합합니다. 그렇지 않습니까? 아마 나는 그것을 제대로 따르지 않을 것이다.
당신은 또한 case
문을 사용할 수 있습니다
select max(content_x), max(content_y)
from (
select
case when category = X
then DBMS_LOB.SUBSTR(ost_bama_vrij_veld.inhoud,3) end as content_x,
case when category = Y
then DBMS_LOB.SUBSTR(ost_bama_vrij_veld.inhoud,100) end as content_y,
from my_table
where category in (X, Y)
and column 1 = 1 AND column2 = 2, etc.
)
대답 해 주셔서 감사합니다, 첫 번째 쿼리는 SQL 개발자에 완벽하게 작동합니다. BI 게시자에게도 제대로 작동하는지 확인해야합니다. :) 두 번째 쿼리는 좋은 아이디어입니다. 전에 with 문을 사용하지는 않았지만 확실히 테스트해볼 것입니다. 쿼리를 실행하는 응용 프로그램이 from 및 where 절을 보내고 중복을 작성하기 때문에 그룹을 사용해야합니다. 이 절은 최종 사용자가 제공합니다. – user3198582