【问题标题】:Include a hashtag in dbGetQuery()在 dbGetQuery() 中包含主题标签
【发布时间】:2023-04-05 21:20:01
【问题描述】:

我正在尝试使用 RJDBC 连接到 SAP HANA 数据库并查询以#-prefix 存储的临时表:

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" 这样的转义符并没有解决我的问题。

【问题讨论】:

    标签: r hana rjdbc


    【解决方案1】:

    不可能从不同的会话中查询本地或全局临时表的数据,因为它们根据定义是特定于会话的。在全局临时表的情况下,可以查询表的元数据,因为它们是跨会话共享的。

    来源:Tutorial for HANA temporary tables

    【讨论】:

      【解决方案2】:

      您必须对表格进行双引号,因为它包含特殊字符,有关详细信息,请参阅SAP Help, identifiers

      测试

      另见stackoverflow上的相关讨论。

      【讨论】:

      • 谢谢。我试过了,但它似乎不起作用。我仍然收到相同的错误消息。你有没有成功地读出一个临时表。也许这不可能,因为它们只存在于创建它们的会话中?
      • 刚刚检查,本地温度。表双引号是可选的。以下代码在省略引号时也适用:创建本地临时表“#LTTEST”(键nvarchar(10),值nvarchar(100));插入“#LTTEST”(键,值)值('1','一些值');从“#LTTEST”中选择 *; HANA SQL 参考说一个简单的标识符必须以 { | },我仍然会引用它。你是对的关于会话。您只能查询一个 loc。温度。同一个会话中的表,不知道这在 R 中是否可行。
      【解决方案3】:

      好的,本地临时表始终只对定义它们的会话可见,而全局临时表就像普通表一样可见,但数据是会话私有的。

      所以,如果您创建了本地 temp.表(名称以#开头)在不同的会话中,那么难怪找不到它。

      对于您的示例,问题是:为什么首先需要一个临时表? 取而代之的是,您可以例如定义一个视图或一个表函数来从中选择数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-03
        • 2012-07-17
        • 2015-08-28
        • 1970-01-01
        • 2020-08-29
        • 2012-07-05
        • 1970-01-01
        相关资源
        最近更新 更多