使用 Slick 3.2 指定 Oracle 模式
Specify Oracle schema with Slick 3.2
我有一个包含多个 users/schemas 的 Oracle 数据库,我想为特定用户自动生成 Slick Schemas。这是我到目前为止尝试过的方法:
import scala.concurrent.ExecutionContext.Implicits.global
val profileInstance: JdbcProfile =
Class.forName("slick.jdbc.OracleProfile$")
.getField("MODULE$")
.get(null).asInstanceOf[JdbcProfile]
val db = profileInstance.api.Database
.forURL("jdbc:oracle:thin:@//myhost:myport/servicename","user","pass")
val modelAction = OracleProfile.createModel(Some(OracleProfile.defaultTables))
val model = Await.result(db.run(modelAction), Duration.Inf)
model.tables.foreach(println)
这不会打印任何内容,我想我必须提供要使用的当前架构,但我不知道该怎么做。
另一方面,我可以使用以下代码列出数据库的所有模式:
val resultSet = db.createSession().metaData.getSchemas.getStatement.getResultSet
while(resultSet.next()) {
println(resultSet.getString(1))
}
如何指定要与 Slick 一起使用的模式?
我已经知道怎么做了。我没有使用 OracleProfile.defaultTable
,而是手动定义了我需要的表和视图,如下所示:
val modelAction = OracleProfile.createModel(
Some(MTable.getTables(None, Some("MYSCHEMA"), None, Some(Seq("TABLE", "VIEW"))))
)
我有一个包含多个 users/schemas 的 Oracle 数据库,我想为特定用户自动生成 Slick Schemas。这是我到目前为止尝试过的方法:
import scala.concurrent.ExecutionContext.Implicits.global
val profileInstance: JdbcProfile =
Class.forName("slick.jdbc.OracleProfile$")
.getField("MODULE$")
.get(null).asInstanceOf[JdbcProfile]
val db = profileInstance.api.Database
.forURL("jdbc:oracle:thin:@//myhost:myport/servicename","user","pass")
val modelAction = OracleProfile.createModel(Some(OracleProfile.defaultTables))
val model = Await.result(db.run(modelAction), Duration.Inf)
model.tables.foreach(println)
这不会打印任何内容,我想我必须提供要使用的当前架构,但我不知道该怎么做。
另一方面,我可以使用以下代码列出数据库的所有模式:
val resultSet = db.createSession().metaData.getSchemas.getStatement.getResultSet
while(resultSet.next()) {
println(resultSet.getString(1))
}
如何指定要与 Slick 一起使用的模式?
我已经知道怎么做了。我没有使用 OracleProfile.defaultTable
,而是手动定义了我需要的表和视图,如下所示:
val modelAction = OracleProfile.createModel(
Some(MTable.getTables(None, Some("MYSCHEMA"), None, Some(Seq("TABLE", "VIEW"))))
)