使用 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 当我在 tOracleRow
或 tOracleinput
中粘贴这个查询时它说无效 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,您可以同时使用 tOracleInput 和 tOracleOutput 组件,然后使用只有 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 行来执行查询。用分号分隔查询。
我正在尝试使用 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 当我在 tOracleRow
或 tOracleinput
中粘贴这个查询时它说无效 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,您可以同时使用 tOracleInput 和 tOracleOutput 组件,然后使用只有 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 行来执行查询。用分号分隔查询。