【问题标题】:How can I have slick generates query without double quotes?如何在没有双引号的情况下生成光滑的查询?
【发布时间】:2015-12-09 18:23:37
【问题描述】:

我正在尝试使用 Slick 与 Oracle DB 进行交互。映射为:

trait EntityTable extends DataBaseConfig{

  import driver.api._

  class Log(tag: Tag) extends Table[LogEntity](tag,"LOG_SCHEMA.A_TABLE_WITH_VERY_LONG_NAME") {
    def id = column[Option[Long]]("LOG_ID",O.PrimaryKey,O.AutoInc)
    def log = column[String]("LOG_TEXT")

    def * = (LOG_ID, LOG_TEXT) <> ((LogEntity.apply _).tupled, LogEntity.unapply)
  }
  protected val getLogs = TableQuery[Log]
}

从调试器中我看到生成的 SQL 是:

select "LOG_ID", "LOG_TEXT" from "LOG_SCHEMA.A_TABLE_WITH_VERY_LONG_NAME"

这给了我一个

ORA-00972: identifier is too long

如何在没有双引号的情况下生成光滑的查询?还是有更好的方法来处理我无法控制的不同方案中的长表名?谢谢!

【问题讨论】:

    标签: sql oracle scala slick


    【解决方案1】:

    在 Oracle 中,名称(表、索引、视图)的长度不能超过 30 个字符。在你的例子中,我猜你有一个错误,而不是

    "LOG_SCHEMA.A_TABLE_WITH_VERY_LONG_NAME"
    

    试试这个:

    """LOG_SCHEMA"."A_TABLE_WITH_VERY_LONG_NAME"""
    

    或者这个:

    "\"LOG_SCHEMA\".\"A_TABLE_WITH_VERY_LONG_NAME\""
    

    不管表是如何创建的,A_TABLE_WITH_VERY_LONG_NAME 不能超过 30 个字符。

    【讨论】:

    • 我使用了"""LOG_SCHEMA"."A_TABLE_WITH_VERY_LONG_NAME""",它生成了"select "LOG_ID", "LOG_TEXT" from "LOG_SCHEMA""。""A_TABLE_WITH_VERY_LONG_NAME""
    • “\"LOG_SCHEMA\".\"A_TABLE_WITH_VERY_LONG_NAME\"" 怎么样?
    • 另一种选择是使用 LOG_SCHEMA 用户名连接到数据库,而您可以只使用“A_TABLE_WITH_VERY_LONG_NAME”,在这种情况下,您不必使用 schema_name 限定 table_name,或者为 LOG_SCHEMA.A_TABLE_WITH_VERY_LONG_NAME 创建一个 sysnonim
    • 使用 "\"LOG_SCHEMA\".\"A_TABLE_WITH_VERY_LONG_NAME\"" ,它会产生 """LOG_SCHEMA"".""A_TABLE_WITH_VERY_LONG_NAME"""。我无法控制最初提到的 LOG_SCHEMA 用户名。
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    相关资源
    最近更新 更多