暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 与db链路一起使用时CTE失败

ASKTOM 2021-04-28
371

问题描述

我正在尝试在将数据从一个数据库复制到另一个数据库的查询中使用cte。使用cte是因为我无法处理connect by的循环。

在这个简单的说明中,插入使用的db链接会导致错误 (ORA-00942: 表或视图不存在)。

insert into don.T2@gstest (RELATE_STRING)
with cte (LVL, I, PARENT_I, RELATE) as (
select 1 as LVL,
    I,
    PARENT_I,
    '+' || RELATE as RELATE
from don.T1@gsdev
    where PARENT_I is null
union all
select c.LVL + 1,
    t.I,
    t.PARENT_I,
    c.RELATE || '+' || t.RELATE
from cte c
join T1 t
    on t.PARENT_I = c.I)
select RELATE from cte order by LVL, I;


该插图没有周期问题,因此可以使用connect by进行演示。

如果我确保从目标数据库执行代码,并且我删除了db链接,则代码可以正常工作。

insert into don.T2 (RELATE_STRING)
...

我无法弄清楚如何在liveSql中建立数据库链接。

专家解答

看起来你撞到了一只虫子。虽然它看起来像你在查询两个数据库,所以我想知道:

为什么不在目标数据库 (gstest) 上本地运行insert?

如果你不能,因为... 原因...你总是可以解决这个过程分成两个:

-将查询的输出加载到 (本地) 暂存表中
-从此暂存表插入远程数据库

The cte is used because I am unable to handle a cycle with connect by.

循环条件到底是什么?可能有一种方法可以通过nocycle进行连接。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论