[英]Oracle invalid identifier error
我在內部查詢的where子句中獲取了t.ev_no的oracle無效標識符錯誤
首先,讓我解釋一下我的表結構和查詢的目的。 我有一個名為vendor的表,其中包含以下列
我將在gridview中顯示此信息,但地址是單個列,其中包含每個單獨行上的address1,address2,address3,city,state和zip。 如果這些列中的任何一個為NULL,那么我必須跳過換行符。 因此內部查詢用case來處理這個問題。
問題是某種程度上oracle無法識別內部查詢的where子句中的t.ev_no。 我的查詢如下
select t.ev_no,
t.ev_type,
t.ev_name,
(select ADD1 || ADD2 || ADD3 || CITY || STATE || ZIP
from (select CASE
WHEN ev_address1 is NULL then
''
ELSE
ev_address1 || '<br>'
END AS "ADD1",
CASE
WHEN ev_address2 is NULL then
''
ELSE
ev_address2 || '<br>'
END AS "ADD2",
CASE
WHEN ev_address3 is NULL then
''
ELSE
ev_address3 || '<br>'
END AS "ADD3",
CASE
WHEN ev_city is NULL then
''
ELSE
ev_city || '<br>'
END AS "CITY",
CASE
WHEN ev_state is NULL then
''
ELSE
ev_state || '<br>'
END AS "STATE",
CASE
WHEN ev_zip is NULL then
''
ELSE
ev_zip || '<br>'
END AS "ZIP"
from vendor where ev_no = t.ev_no)) as "ADDRESS",
t.ev_state,
t.ev_city,
t.payment_address,
t.ev_mwbe
from vendor t
where UPPER(ev_city) like :city
order by t.ev_state, t.ev_city, t.ev_name
請讓我知道如何糾正錯誤。
謝謝
不記得確切的問題,但在oracle中,嵌套查詢可以使用別名的范圍有限。 要解決此問題,您可以使用WITH
子句重寫。
WITH addressquery
AS (SELECT ev_no,
CASE
WHEN ev_address1 IS NULL THEN ''
ELSE ev_address1
|| '<br>'
END AS "ADD1",
CASE
WHEN ev_address2 IS NULL THEN ''
ELSE ev_address2
|| '<br>'
END AS "ADD2",
CASE
WHEN ev_address3 IS NULL THEN ''
ELSE ev_address3
|| '<br>'
END AS "ADD3",
CASE
WHEN ev_city IS NULL THEN ''
ELSE ev_city
|| '<br>'
END AS "CITY",
CASE
WHEN ev_state IS NULL THEN ''
ELSE ev_state
|| '<br>'
END AS "STATE",
CASE
WHEN ev_zip IS NULL THEN ''
ELSE ev_zip
|| '<br>'
END AS "ZIP"
FROM vendor)
SELECT t.ev_no,
t.ev_type,
t.ev_name,
a.add1 || a.add2 || a.add3 || a.city || a.state || a.zip AS "ADDRESS",
t.ev_state,
t.ev_city,
t.payment_address,
t.ev_mwbe
FROM vendor t
join addressquery a
ON t.ev_no = a.ev_no
WHERE 1 = 1
AND Upper(ev_city) LIKE :city
ORDER BY t.ev_state,
t.ev_city,
t.ev_name
所以我發現查詢的嵌套導致了這個問題。 以下查詢可以成功運行,但查詢的可讀性受到重大影響。
select t.ev_no,
t.ev_type,
t.ev_name,
(select CASE
WHEN ev_address1 is NULL then
''
ELSE
ev_address1 || '<br>'
END || CASE
WHEN ev_address2 is NULL then
''
ELSE
ev_address2 || '<br>'
END || CASE
WHEN ev_address3 is NULL then
''
ELSE
ev_address3 || '<br>'
END || CASE
WHEN ev_city is NULL then
''
ELSE
ev_city || '<br>'
END || CASE
WHEN ev_state is NULL then
''
ELSE
ev_state || '<br>'
END || CASE
WHEN ev_zip is NULL then
''
ELSE
ev_zip || '<br>'
END
from LMS_APPL.tlsev_external_vendor
where ev_no = t.ev_no) as "ADDRESS",
t.ev_state,
t.ev_city,
t.payment_address,
t.ev_mwbe
from vendor t
where UPPER(ev_city) like :city
order by t.ev_state, t.ev_city, t.ev_name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.