Sql查询未执行 - 显示无效标识符错误

时间:2017-04-06 04:56:11

标签: sql oracle

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 identifier

如何获得这个" new_order_id"因为我需要进一步加入。

2 个答案:

答案 0 :(得分: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 :(得分: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;