2017-04-06 92 views
1
with ticket_orders AS(
    select REGEXP_SUBSTR(st.ORDER_ID, '\d{3}-\d{7}-\d{7}') "new_order_id" 

from 

(select 

REGEXP_SUBSTR(details, 'Order\s+ID(\s*\(s\))?:\s*\d{3}-\d{7}-\d{7}') AS "ORDER_ID" 
from o_remedy ort 
) st) 


select new_t.new_order_id from ticket_orders new_t; 

我試圖執行下面的SQL語句,但它不斷顯示錯誤的"NEW_T"."NEW_ORDER_ID": invalid identifierSQL查詢不執行 - 顯示無效的標識符錯誤

如何得到這個「new_order_id」因爲我需要進一步加入吧。

+0

不要你的意思是 「前面的SQL語句」? – toonice

+1

您正在選擇't.new_order_id',但錯誤顯示爲「NEW_T」。「NEW_ORDER_ID」'? 'NEW_T'從哪裏來? – Utsav

+0

對不起,我打錯了,它只是new_t – Arman

回答

1

要麼從派生列名稱中刪除雙引號,要麼在select子句中使用雙引號。

select new_t."new_order_id" from ticket_orders new_t; 

默認情況下,Oracle會將每個對象名稱都轉換爲大寫,除非您在雙引號中指定它。所以"new_order_id"將不會被轉換爲大寫,但是當選擇new_t.new_order_id時會被轉換爲大寫,這不存在。

要解決它,請從派生列名稱中刪除雙引號,或者在select子句中使用雙引號。

我在我的本地機器上像這樣複製它。

這不起作用。

with tbl as 
(select empno "new_emp_no" from emp) 
select t.new_emp_no From tbl t 

並給予

ORA-00904: 「T」 「NEW_EMP_NO」:無效的標識符 00904. 00000 - 「%S:無效的標識符」 *原因:
*行動:線路錯誤:116列:10

但是,這將工作。

with tbl as 
(select empno "new_emp_no" from emp) 
select t."new_emp_no" From tbl t 
1
WITH ticket_orders AS 
(
    SELECT 
     REGEXP_SUBSTR(st.ORDER_ID, '\d{3}-\d{7}-\d{7}') new_order_id 
    FROM 
    (
     SELECT 
     REGEXP_SUBSTR(details, 'Order\s+ID(\s*\(s\))?:\s*\d{3}-\d{7}-\d{7}') AS ORDER_ID 
     FROM o_remedy ort 
    ) st 
) 
SELECT new_t.new_order_id FROM ticket_orders new_t;