2017-04-16 79 views
0

我試圖用tOracleRow.I我試圖用下面的語句來創建表創建一個表獲取:錯誤而使用tOracleRow了Talend

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; 

enter image description here

現在的問題是這個查詢運行很好的SQL Developer.Whereas,當我粘貼這個查詢tOracleRowtOracleinput它是說,無效char.Then我試圖刪除;,但它是說SQL命令沒有正確結束。

enter image description here

+0

當我不給「;」它給錯誤[統計]連接到端口上的套接字3686 [statistics]連接 組件異常tOracleInput_1 java.sql.SQLSyntaxErrorException:ORA-00911:無效字符兩個表的示例數據是 – Abhijit

+0

請複製並通過兩個錯誤在您的文章(有和沒有';')。你有沒有試過第一行'Drop table'? – Blag

回答

1

有可能讓tOracleRow一次執行多個語句。

您需要提供「附加參數」的連接使用的是:allowMultiQueries=true

新建連接嚮導:

New Connection Wizard

還需要在使用BEGIN END塊你如果您使用多個語句,則爲tOracleRow組件。在關閉END關鍵字後還需要分號。

多個語句與BEGIN END塊:

Multiple statements with BEGIN END block

0

嘗試:

" 
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請求

+0

我已經在你的way.Now它給這樣的例外在組件tOracleInput_1 java.sql.SQLSyntaxErrorException嘗試:ORA-00911:無效字符 \t在oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91 ) – Abhijit

+0

我試過只使用DROP Table.Now當我沒有使用「;」它給了我[統計]連接到端口上的套接字3420 [統計]連接 組件異常tOracleInput_1 java.sql.SQLException:ORA-01003:沒有語句解析,當我使用「;」它將[統計信息]連接到端口3871上的套接字 [statistics]連接 組件異常tOracleInput_1 java.sql.SQLSyntaxErrorException:ORA-00911:無效字符 – Abhijit

+0

您應該在tOracleInput組件中使用select語句。你能不能嘗試在tOracleRow中運行你的多行語句;在最後的陳述...它是否工作..你可以嘗試用更簡單的語句,比如兩個drop語句,而不是一個drop和一個create。你也可以嘗試使用/作爲toracleRow組件中各個sql查詢的分隔符。 – garpitmzn

0

而結束,您可以同時使用tOracleInputtOracleOutput成分然後只使用選擇查詢 「從項目中選擇a.ITEM_NAME,b.MANUFACTURER_NAME一個 LEFT OUTER JOIN MANUFACTURERS b ON a.MANUFACTURER_ID = b.MANUFACTURER_ID 」 爲tOracleInput查詢,然後選擇 「Drop和創建表」 上表作用下的tOracleOutput

0

tOracleRow的目的是執行一個語句每個了Talend記錄流..所以,如果你給DROP &在CREATE語句一個它tOracleRow不會按我的知識應用到工作..

你可以嘗試下面的這些選項。

- >您的兩個語句分成兩個tOracleRow組件或 - >創建一個PLSQL塊和使用,在tOracleRow像下面 「BEGIN EXECUTE IMMEDIATE 'DROP TABLE TEMP_ORDERS'; EXECUTE IMMEDIATE「CREATE TABLE TEMP_ORDERS AS 從ITEMS選擇a.ITEM_NAME,b.MANUFACTURER_NAME a 左外部聯接製造商b ON a.MANUFACTURER_ID = b.MANUFACTURER_ID'; END;「

讓我知道,如果它的作品了

0

你需要兩個獨立的部件tOracleRow。無法像使用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" 
0

該解決方案是基於以前的帖子。 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 
;