将Oracle Query转换为DB2 Query

时间:2014-05-27 11:33:41

标签: sql oracle

如何将以下Oracle Query转换为DB2。 Query在Oracle中运行良好,但在DB2中运行不正确。

Query:
Select f.folder_id, f.identifier
            From FOLDER f, STOREENT se
            Where f.type = 'AttributeFolder'
            And se.storeent_id = f.storeent_id 
            And se.identifier = 'Global_CAS'
            And f.identifier = 10051 
connect by prior f.folder_id = f.parentfolder_id
start with f.identifier = 'Categories Descriptors [Global.B2C.Sales]'

感谢Ur的回复。我在环境中试过了同样的事情。我收到以下错误。你能帮助我出错吗?

查询:

使用cte as(选择folder_id,f.identifier,cast(null作为varchar(255))parentfolder_id,0作为深度,se.identifier作为se_identifier来自文件夹f join storeent se se.storeent_id = f.storeent_id其中f .identifier ='A'union all选择f.folder_id,f.identifier,f.parentfolder_id,cte.depth + 1作为深度,se.identifier作为se_identifier来自文件夹f join storeent se se.storeent_id = f.storeent_id join cte cte on f.parentfolder_id = cte.folder_id)从cte中选择parentfolder_id,folder_id,identifier,depth

java.sql.SQLSyntaxErrorException:语法错误:在第1行第1列遇到“with”。

2 个答案:

答案 0 :(得分:2)

事实上,如果启用了Oracle兼容模式(db2set DB2_COMPATIBILITY_VECTOR=08),DB2 for Linux,Unix和Windows v.9.7及更高版本支持这种Oracle专有语法,如下所述:{{3 }}

如果要迁移Oracle数据库应用程序,则可能需要通过在创建DB2之前将CONNECT BY设置为DB2_COMPATIBILITY_VECTOR来启用所有Oracle兼容性功能,而不仅仅是ORA语法支持。数据库中。

答案 1 :(得分:1)

Connect bystart with是特定于Oracle的。要在DB2中实现类似的功能,请使用公用表表达式(CTE)(使用SQL Server进行测试,但也应该在DB2上运行):

with cte as (
    select folder_id, f.identifier, cast(null as varchar(255)) parentfolder_id,
       0 as depth,
       se.identifier as se_identifier
       from folder f
       join storeent se on se.storeent_id = f.storeent_id
       where f.identifier = 'A'
    union all
    select f.folder_id, f.identifier, f.parentfolder_id,
       cte.depth + 1 as depth,
       se.identifier as se_identifier
    from folder f
    join storeent se on se.storeent_id = f.storeent_id
    join cte cte on f.parentfolder_id = cte.folder_id
)
Select parentfolder_id, folder_id, identifier, depth
from cte

CTE由两部分组成:

  • 基础部分,您可以在其中选择根节点
  • 递归部分,您将基表与CTE本身连接起来

SQL Fiddle (for SQL server)

进一步阅读:IBM Developerworks article on migration Oracle tree queries to recursive CTE's