从使用 SQL 创建的存储过程中借助 Scala 访问数据¶
要使用以 Scala 编写的存储过程处理程序访问数据,请使用 Snowpark 库 APIs。
处理对 Scala 存储过程的调用时,Snowflake 会创建一个 Snowpark Session 对象,并将该对象传递给存储过程的方法或函数。
与处理程序是使用其他语言编写的存储过程一样,会话的上下文(例如权限、当前数据库和架构等)取决于存储过程是以调用方权限还是所有者权限运行。有关详细信息,请参阅 访问和设置会话状态。
您可以使用此 Session 对象调用 Snowpark 库 中的 APIs。例如,您可以 :doc:` 为表创建 DataFrame </developer-guide/snowpark/scala/working-with-dataframes>`,或执行 SQL 语句。
有关更多信息,请参阅 Snowpark Scala 开发者指南。
备注
有关限制(包括访问数据的限制)的信息,请参阅 使用 SQL 创建的存储过程中 Scala 的限制。
数据访问示例¶
以下是 Scala 方法的示例,该方法将指定数量的行从一个表复制到另一个表。该方法采用以下实参:
- Snowpark - Session对象
- 要从中复制行的表的名称 
- 要将行保存到的表的名称 
- 要复制的行数 
此示例中的方法返回一个字符串。
object MyObject
{
  def myProcedure(session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =
  {
    session.table(fromTable).limit(count).write.saveAsTable(toTable)
    return "Success"
  }
}
以下示例定义了一个函数而不是一个方法:
object MyObject
{
  val myProcedure = (session: com.snowflake.snowpark.Session, fromTable: String, toTable: String, count: Int): String =>
  {
    session.table(fromTable).limit(count).write.saveAsTable(toTable)
    "Success"
  }
}