如何在没有双引号的情况下生成查询?

时间:2015-12-09 18:23:37

标签: sql oracle scala slick

我试图使用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

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

1 个答案:

答案 0 :(得分: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个字符。