sql - ORA-00904 无效标识符即使列存在

标签 sql oracle select identifier

我有一个查询,我想在其中生成 SUBSCRIPTION_ID,ORDER_NUMBER。查询工作正常。但我现在还想在创建 SUBSCRIPTION_ID 时显示 START_DATE。但此后我收到错误消息:

ORA-00904: "WF"."START_DATE": invalid identifier
00904. 00000 -  "%s: invalid identifier"

这是我的查询:

    select iw.SUBSCRIPTION_ID,iw.ORDER_NUMBER,WF.START_DATE
    from (
       SELECT TO_NUMBER(REPLACE(REPLACE(REGEXP_SUBSTR(RESPONSE_XML, '<ax2147:subscriptions xsi:type="ax2127:SubscriptionDTO"><ax2130:id>\d+</ax2130:id>'), 
       '<ax2147:subscriptions xsi:type="ax2127:SubscriptionDTO"><ax2130:id>',''),'</ax2130:id>','')) 
       AS SUBSCRIPTION_ID , 
       CAST(REPLACE(REPLACE(
      REGEXP_SUBSTR(REQUEST_XML,'<ns7:orderType>.+</ns7:orderType>'),'<ns7:orderType>',''),'</ns7:orderType>','')
      AS VARCHAR(100)) AS    order_type,TO_NUMBER(REPLACE(REPLACE(REGEXP_SUBSTR(RESPONSE_XML,'<ax2147:orderNumber>\d+</ax2147:orderNumber>'),'<ax2147:orderNumber>',''),'</ax2147:orderNumber>','')) 
      AS ORDER_NUMBER,
       CREATE_DATE
       FROM
       SOAP_MONITORING,WF_WORKFLOW ww
       where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder' 
    ) iw
    where iw.order_type='NEW' and iw.SUBSCRIPTION_ID IN
    (select WF.SUBSCRIPTION_ID
       from WF_WORKFLOW WF where WF.NAME='SIGNUP_MOBILE_PRE_PAID' 
    and WF.STATUS_ID=0 and WF.START_DATE < sysdate - 30 / (24 * 60))

最佳答案

问题是 WF_WORKFLOW 仅在用于 IN 谓词的子查询范围内可用,而您在该范围外引用它。

我认为您可以重写查询以使用联接,而不是像这样:

select iw.SUBSCRIPTION_ID,iw.ORDER_NUMBER,WF.START_DATE
from (
       SELECT TO_NUMBER(REPLACE(REPLACE(REGEXP_SUBSTR(RESPONSE_XML, '<ax2147:subscriptions xsi:type="ax2127:SubscriptionDTO"><ax2130:id>\d+</ax2130:id>'), 
       '<ax2147:subscriptions xsi:type="ax2127:SubscriptionDTO"><ax2130:id>',''),'</ax2130:id>','')) 
       AS SUBSCRIPTION_ID , 
       CAST(REPLACE(REPLACE(
      REGEXP_SUBSTR(REQUEST_XML,'<ns7:orderType>.+</ns7:orderType>'),'<ns7:orderType>',''),'</ns7:orderType>','')
      AS VARCHAR(100)) AS    order_type,TO_NUMBER(REPLACE(REPLACE(REGEXP_SUBSTR(RESPONSE_XML,'<ax2147:orderNumber>\d+</ax2147:orderNumber>'),'<ax2147:orderNumber>',''),'</ax2147:orderNumber>','')) 
      AS ORDER_NUMBER,
       CREATE_DATE
       FROM
       SOAP_MONITORING,WF_WORKFLOW ww
       where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder' 
    ) iw
inner join WF_WORKFLOW WF on iw.SUBSCRIPTION_ID = WF.SUBSCRIPTION_ID
where iw.order_type='NEW' 
and WF.NAME='SIGNUP_MOBILE_PRE_PAID' 
and WF.STATUS_ID=0 and (WF.START_DATE < sysdate - 30 / (24 * 60))

显然我还没有测试过...

关于sql - ORA-00904 无效标识符即使列存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344429/

相关文章:

日期之间的 SQL 但在特定时间中断并在特定时间继续

MySQL计算邮政编码之间的距离更快更准确?

Oracle-更新多行值,其中 id 列等于特定值

oracle - 在协作的,版本控制的环境中,您如何处理Oracle软件包?

sql - 如何更改 Oracle View 中的列数据类型?

mysql - 查询空字符串是否应该在主键列上匹配零?

MySQL连接水平与垂直表

Mysql统计行数和行数为null

mysql - 如何制作几列?

sql - 如何在 SQL Server 中更新表并添加列值?