Oracle上的wso2am 2.1.0-sqlexception缺少右括号

时间:2018-11-24 08:34:42

标签: oracle wso2 wso2-am

使用WSO2AM-2.1.0-update12(carbon-apomgt标记v6.2.108)通常可以在mysql上正常工作。我们打算将基础数据库切换为Oracle DB(据我所知11g),看起来很简单。

创建API后,apim会引发SQLException

ORA-00907: missing right parenthesis

我们将异常追溯到

org.wso2.carbon.apimgt.impl.dao.ApiMgtDAO:7652

执行以下查询:

  SELECT 
   A.SCOPE_ID, A.NAME, A.DISPLAY_NAME,
   A.DESCRIPTION, C.SCOPE_BINDING 
   FROM  
   ((IDN_OAUTH2_SCOPE AS A  INNER JOIN  AM_API_SCOPES AS B ON A.SCOPE_ID = B.SCOPE_ID)
   INNER JOIN  IDN_OAUTH2_SCOPE_BINDING AS C ON B.SCOPE_ID = C.SCOPE_ID )
   WHERE B.API_ID = 1;

针对APIM数据库本身运行此查询确实会重现异常,因此未对代码进行正确的测试。对于某些定制,我们宁愿尝试修复代码(如果可能的话),而不是迁移到新版本(我们无法保证问题已解决,或者我们的定制可以工作)

我怀疑该查询根本没有经过测试,正确的查询可能看起来像

  SELECT 
   A.SCOPE_ID, A.NAME, A.DISPLAY_NAME,
   A.DESCRIPTION,   C.SCOPE_BINDING 
   FROM  
     IDN_OAUTH2_SCOPE  A  INNER JOIN  AM_API_SCOPES B ON A.SCOPE_ID = B.SCOPE_ID
   INNER JOIN  IDN_OAUTH2_SCOPE_BINDING  C ON B.SCOPE_ID = C.SCOPE_ID 
   WHERE B.API_ID = 1;

如果查询在语法和语义上不等效,我想验证并纠正我

1 个答案:

答案 0 :(得分:0)

请尝试以下方法?

SELECT A.SCOPE_ID, A.NAME, A.DISPLAY_NAME, A.DESCRIPTION, C.SCOPE_BINDING FROM ((IDN_OAUTH2_SCOPE A  INNER JOIN  AM_API_SCOPES B ON A.SCOPE_ID = B.SCOPE_ID) INNER JOIN  IDN_OAUTH2_SCOPE_BINDING C ON B.SCOPE_ID = C.SCOPE_ID ) WHERE B.API_ID = ?

您可以在https://github.com/wso2/carbon-apimgt/blob/6.x/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/dao/constants/SQLConstants.java#L2068

中找到此更正的查询
相关问题