1

我有一组 SQL 语句,使用 Invantive SQL 的分布式选项从 Exact Online 中提取发货信息,并在 Freshdesk 中为每个发货序列号创建一张票,以及作为联系人的消费者。

在一个登录代码下连接到 Exact Online 和 Freshdesk 时,这可以正常工作。但是,最终用户使用不同的登录代码。在这种情况下,SQL 语句集从 Exact Online 中的测试部门而不是正确的生产部门检索数据。

当不使用分布式选项时,我可以使用以下方法更改划分:

use 123123

123123Exact Online 国家/地区的唯一部门编号在哪里。

当同时连接到 Exact Online 和 Freshdesk 时,我得到:

itgenuse002: List of partitions could not be determined.

如何强制为特定的 Exact Online 部门执行一组 SQL 语句,而不是为登录代码当时设置的默认 SQL 语句?

显示问题的示例 SQL 查询:

create or replace table fulladdress@inmemorystorage --STAP 1.
as 
select acad.id
,      acad.name
,      acad.phone
,      acad.email
,      acad.addressline1 || '   ' || acad.postcode || '   ' || acad.city fulladdress
from   ExactonlineREST..Accounts@eolnl acad 
where  acad.status = 'C'
4

2 回答 2

2

所示use语句适用于只有一个数据容器的数据库。在这种情况下,只有一个数据容器可以处理问题,并且一切运行顺利。

使用 Invantive SQL 中的分布式查询,您需要将 use 语句指向要使用的数据容器。否则,第一个数据容器将尝试处理它(在这种情况下可能是没有分区概念的 Freshdesk)。这类似于将数据容器别名附加到每个表,如下所示:

select ...
from   table@eolnl
join   table2@freshdesk
on     ...

在这里eolnlfreshdesk指定表应该在哪里查找。

因此,在这种情况下使用:

use 123123@eolnl

声明也是如此set

于 2016-11-07T10:15:17.490 回答
0

从您的代码看来,您的连接中运行了多个数据容器。在用户界面中,您只能在默认数据容器上设置分区。

但是,有一个简单的代码解决方案可供使用。您必须知道要为其设置分区的数据容器的别名。在调用中使用该别名use(在此示例123123中是您要选择的分区):

use 123123@eolnl

或者使用所有可用的分区:

use all@eolnl
于 2016-11-07T10:14:26.867 回答