2017-02-23 97 views
0

我試圖用RJDBC連接到SAP HANA數據庫和查詢的臨時表,它存儲了# - 前綴:包括在dbGetQuery()哈希標籤

test <- dbGetQuery(jdbcConnection, 
     "SELECT * FROM #CONTROL_TBL") 

# Error in [...]: invalid table name: Could not find table/view #CONTROL_TBL in schema USER 

如果我執行HANA中的SQL語句,它工作得很好。我也能夠查詢永久表。因此,我認爲R不會超過標籤。插入像"SELECT * FROM \\#CONTROL_TBL"這樣的轉義符並不能解決我的問題。

回答

0

您必須對錶格加雙引號,因爲它包含特殊字符,詳情請參閱SAP Help, identifiers

測試< - dbGetQuery(jdbcConnection, 'SELECT * FROM 「#CONTROL_TBL」')

也見相關討論stackoverflow

+0

謝謝。我試過了,但它似乎並不奏效。我仍然收到相同的錯誤信息。你有沒有成功地讀出一張臨時桌子?也許它不可能是因爲他們只生活在他們創建的會話中? – laterstat

+0

剛剛檢查過,查詢當地的溫度。以下代碼在刪除引號時也起作用: 創建本地臨時表「#LTTEST」(key nvarchar(10), value nvarchar(100)); 插入「#LTTEST」(鍵值)值('1','某個值'); select * from「#LTTEST」; HANA SQL參考指出,一個簡單的標識符必須以{ | },我仍會引用它。 你是對的會議。你只能查詢一個loc。溫度。表在同一個會話中,不知道這是否可能在R中。 –

1

無法從不同的會話中查詢本地或全局臨時表的數據,因爲它們根據定義會話特定的。在全局臨時表的情況下,可以查詢表的元數據,因爲它們是跨會話共享的。

來源:Tutorial for HANA temporary tables

0

好,局部臨時表始終只在他們已經確定,而全局臨時表是可見的,就像普通表的會話中可見,但數據會話私有。

所以,如果你創建了本地temp。表(名字以#開頭)在不同的會話中,那麼難怪找不到它。

對於您的示例,問題是:爲什麼您首先需要臨時表? 除此之外,你可以例如定義一個視圖或表函數來從中選擇數據。