SQL别名在select语句中不起作用

SQL别名在select语句中不起作用,sql,oracle,alias,Sql,Oracle,Alias,我有两条select语句,我想在select查询中将该语句的结果用作别名,以获得结果。但由于ORA-00933:SQL命令未正确结束,我在查询的最后一行中遇到错误。我不知道我错过了什么。 我的问题是: Select(SELECT xt.id FROM SOAP_MONITORING sm CROSS JOIN XMLTable(XMLNAMESPACES ( 'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv",

我有两条select语句,我想在select查询中将该语句的结果用作别名,以获得结果。但由于ORA-00933:SQL命令未正确结束,我在查询的最后一行中遇到错误。我不知道我错过了什么。 我的问题是:

Select(SELECT xt.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
      'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv",
      'http://service.soap.CDRator.com' as "ns",
      'http://core.data.soap.CDRator.com/xsd' as "ax2130",
      'http://webshop.result.service.soap.CDRator.com/xsd' as "ax2147"
    ),
    'for $i in /soapenv:Envelope/soapenv:Body/ns:placeShopOrderResponse/ns:return/ax2147:subscriptions
      return $i/ax2130:id'
    passing XMLType(sm.RESPONSE_XML)
    columns "ID" number path '/')) AS xt,
    (SELECT xx.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
       'http://webshop.data.soap.CDRator.com/xsd' as "ns7"
    ),
    'for $i in //ns7:orderType return $i'
    passing XMLType(sm.REQUEST_XML)
    columns "ID" VARCHAR2(30) path '/')) AS xx
    FROM SOAP_MONITORING
where WEB_SERVICE_NAME='RatorWebShopService' and WEB_METHOD_NAME='placeShopOrder' and xx.id = 'NEW' ;

您不需要执行子查询,可以从同一传递目标获得两个XMLTable子句:

这使用了您上一个问题中的示例XML,包括来自回滚编辑的请求,两者都已清理为有效

根据讨论,要从wf_工作流表中获取此匹配ID的数据,可以使用联接:

或者将前面的查询作为in子句包括在内;这可能更容易理解,但在功能上是等效的,而不是抑制重复项(您说过您不会有重复项),并且可能与join版本有不同的性能:


第一个问题:您是否验证了所有子选择独立于主查询工作?是的,我已经验证了我的sql查询及其工作正常。我只想使用这个select查询结果作为别名,并在select语句中使用它。因为这两个select statement结果都属于一个表。我想问同样的问题非常感谢Alex。工作正常:。现在只是一个小问题,以便使用此ID并与其他表联接以获得结果。我们如何表演?我是否需要简单地获取xt_req并使用它的结果与其他表联接?我们在前面的问题中没有讨论这个问题吗?是的,只需在where子句之前添加另一个连接,条件基于xt_res.id。我刚刚修复了别名,并将请求列名更改为order_type以避免混淆,包括我的。非常感谢Alex:你救了我的命:我今天花了整整一天来修复这个问题。你好Alex我刚刚发现一个问题,将XT_RES.id与另一个表连接起来。因为我想将这个完整查询的结果与WHERE子句以及另一个表的ID进行比较。所以,如果我不使用ALIAS并按您所说的那样运行查询,我会得到错误的结果,对吗?因为您提到的上述查询将显示完整的单个表的结果,我想将此完整表与另一个表进行比较。这就是为什么我想使用ALIAS来存储此完整查询的结果,然后使用此查询的结果与另一个表进行比较。你对此有什么建议吗?
SELECT xt_res.id
FROM SOAP_MONITORING sm
CROSS JOIN XMLTable(XMLNAMESPACES (
      'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv",
      'http://service.soap.CDRator.com' as "ns",
      'http://core.data.soap.CDRator.com/xsd' as "ax2130",
      'http://webshop.result.service.soap.CDRator.com/xsd' as "ax2147"
    ),
    'for $i in /soapenv:Envelope/soapenv:Body/ns:placeShopOrderResponse/ns:return/ax2147:subscriptions
      return $i/ax2130:id'
    passing XMLType(sm.RESPONSE_XML)
    columns "ID" number path '/') xt_res
CROSS JOIN XMLTable(XMLNAMESPACES (
       'http://webshop.data.soap.CDRator.com/xsd' as "ns7"
    ),
    'for $i in //ns7:orderType return $i'
    passing XMLType(sm.REQUEST_XML)
    columns "ORDER_TYPE" VARCHAR2(30) path '/') xt_req
where sm.WEB_SERVICE_NAME='RatorWebShopService'
and sm.WEB_METHOD_NAME='placeShopOrder'
and xt_req.order_type = 'NEW' ;  


                   ID
---------------------
   201501070917439804 
   201501070917439804 
SELECT wf.* from 
SOAP_MONITORING sm 
CROSS JOIN XMLTable(XMLNAMESPACES ( 
      'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv",
      'http://service.soap.CDRator.com' as "ns",
      'http://core.data.soap.CDRator.com/xsd' as "ax2130",
      'http://webshop.result.service.soap.CDRator.com/xsd' as "ax2147"
), 
'for $i in /soapenv:Envelope/soapenv:Body/ns:placeShopOrderResponse/ns:return/ax2147:subscriptions 
return $i/ax2130:id' 
passing XMLType(sm.RESPONSE_XML) 
columns "ID" number path '/') xt_res 
CROSS JOIN XMLTable(XMLNAMESPACES ( 
       'http://webshop.data.soap.CDRator.com/xsd' as "ns7"
), 
'for $i in //ns7:orderType return $i' 
passing XMLType(sm.REQUEST_XML) 
columns "ORDER_TYPE" VARCHAR2(30) path '/') xt_req 
JOIN WF_WORKFLOW wf 
on wf.SUBSCRIPTION_ID = xt_res.id 
where sm.WEB_SERVICE_NAME='RatorWebShopService' 
and sm.WEB_METHOD_NAME='placeShopOrder' 
and xt_req.order_type = 'NEW'
and WF.NAME='INITIATE_MANDATE' 
and WF.STATUS_ID=0;
SELECT wf.* 
from WF_WORKFLOW wf 
where wf.SUBSCRIPTION_ID in ( 
  select xt_res.id 
  from SOAP_MONITORING sm 
  CROSS JOIN XMLTable(XMLNAMESPACES ( 
        'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv",
        'http://service.soap.CDRator.com' as "ns",
        'http://core.data.soap.CDRator.com/xsd' as "ax2130",
        'http://webshop.result.service.soap.CDRator.com/xsd' as "ax2147"
  ), 
  'for $i in /soapenv:Envelope/soapenv:Body/ns:placeShopOrderResponse/ns:return/ax2147:subscriptions 
  return $i/ax2130:id' 
  passing XMLType(sm.RESPONSE_XML) 
  columns "ID" number path '/') xt_res 
  CROSS JOIN XMLTable(XMLNAMESPACES ( 
         'http://webshop.data.soap.CDRator.com/xsd' as "ns7"
  ), 
  'for $i in //ns7:orderType return $i' 
  passing XMLType(sm.REQUEST_XML) 
  columns "ORDER_TYPE" VARCHAR2(30) path '/') xt_req 
  where sm.WEB_SERVICE_NAME='RatorWebShopService' 
  and sm.WEB_METHOD_NAME='placeShopOrder' 
  and xt_req.order_type = 'NEW'
) 
and WF.NAME='INITIATE_MANDATE' 
and WF.STATUS_ID=0;