使用 tOracleRow Talend 获取数据时出错

Error while fetching using tOracleRow Talend

我正在尝试使用 tOracleRow.I 创建 Table 我正在尝试使用以下语句创建 Table :

DROP TABLE TEMP_ORDERS;
CREATE Table TEMP_ORDERS AS
select a.ITEM_NAME,b.MANUFACTURER_NAME from ITEMS a
LEFT OUTER JOIN MANUFACTURERS b
ON a.MANUFACTURER_ID=b.MANUFACTURER_ID;

现在的问题是这个查询 运行 很好 sql Developer.Whereas 当我在 tOracleRowtOracleinput 中粘贴这个查询时它说无效 char.Then 我尝试删除 ; 但它说 SQL 命令未正确结束。

尝试:

"
DROP TABLE TEMP_ORDERS;
CREATE Table TEMP_ORDERS AS
select a.ITEM_NAME,b.MANUFACTURER_NAME from ITEMS a
LEFT OUTER JOIN MANUFACTURERS b
ON a.MANUFACTURER_ID=b.MANUFACTURER_ID
"

请求末尾没有 ;

而不是使用 tOracleRow,您可以同时使用 tOracleInputtOracleOutput 组件,然后使用只有 select 个查询 "select a.ITEM_NAME,b.MANUFACTURER_NAME 来自 ITEMS a 左外连接制造商 b ON a.MANUFACTURER_ID=b.MANUFACTURER_ID " 作为 tOracleInput 查询,然后 select "Drop and create table" 在 tOracleOutput

的 table 上的操作下

tOracleRow 的目的是为每个 talend 记录流执行单个语句。因此,如果您在一个 tOracleRow 中给出 DROP 和 CREATE 语句,据我所知,它不会工作。

您可以尝试以下选项。

--> 将你的两个语句分成两个 tOracleRow 组件或者 --> 创建一个 PLSQL 块并在 tOracleRow 中使用它,如下所示 “开始 立即执行 'DROP TABLE TEMP_ORDERS'; 立即执行 'CREATE Table TEMP_ORDERS AS select a.ITEM_NAME,b.MANUFACTURER_NAME 来自 ITEMS a 左外连接制造商 b ON a.MANUFACTURER_ID=b.MANUFACTURER_ID'; 结束;"

如果成功了请告诉我

您需要两个单独的 tOracleRow 组件。无法像输入 shell 或工具 SQL Developer 这样可以执行多个命令的工具来使用此组件。

第一个只会保留没有结束分号的drop语句:

"DROP TABLE TEMP_ORDERS"

第二个将只包含创建语句,也没有分号:

"CREATE Table TEMP_ORDERS AS 
select a.ITEM_NAME,b.MANUFACTURER_NAME from ITEMS a
LEFT OUTER JOIN MANUFACTURERS b
ON a.MANUFACTURER_ID=b.MANUFACTURER_ID"

可以让一个 tOracleRow 一次执行多个语句。

您需要为正在使用的连接提供 "additional Parameter":allowMultiQueries=true

新建连接向导:

如果您使用多个语句,您还需要在 tOracleRow 组件中使用 BEGIN END 块。您还需要在结束 END 关键字之后有一个分号。

包含 BEGIN END 块的多个语句:

解决方案基于之前的post。 1) 在 oracle 连接中你必须包含 "allowMuliQueries=true"。 2) 每个查询需要使用一个 BEGIN END 并且还插入一个 EXECUTE IMMEDIATE ->

BEGIN
EXECUTE IMMEDIATE'DROP TABLE TEMP_ORDERS';
EXECUTE IMMEDIATE'CREATE Table TEMP_ORDERS AS
select a.ITEM_NAME,b.MANUFACTURER_NAME from ITEMS a
LEFT OUTER JOIN MANUFACTURERS b
ON a.MANUFACTURER_ID=b.MANUFACTURER_ID';
END
;

在您的查询中,您使用了 DML 以及多个查询。因此,您需要执行以下操作才能使工作正常进行:

i) 使用 tOracleConnection 打开 oracle 连接。在附加参数中设置 allowMultiQueries=true

ii) 使用 tOracle 行来执行查询。用分号分隔查询。