[英]How to use a variable AS a where clause?
我有一個where子句,必須多次使用。 我對Oracle SQL還是很陌生,所以請原諒我的新手錯誤:)。 我已經閱讀了該網站,但找不到答案:(.。這是SQL語句:
var condition varchar2(100)
exec :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
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 table_name
where category = Y AND :condition
group by (DBMS_LOB.SUBSTR(ost_bama_vrij_veld.inhoud,100))) B
GROUP BY
a.content, b.content
content字段是CLOB字段,不幸的是,所有需要的值都在同一列中。 我的查詢當然行不通。
您不能對這么多的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
...
在其他地方,包括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.
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.