Création d’une procédure stockée

Vous créez une procédure stockée avec une commande CREATE PROCEDURE qui spécifie les propriétés de la procédure, y compris le gestionnaire à utiliser pour sa logique.

Cette rubrique présente les étapes de la création d’une procédure. Pour des exemples, voir la référence CREATE PROCEDURE.

Note

Vous pouvez également créer et appeler une procédure qui n’est pas stockée pour une utilisation ultérieure. De nombreuses propriétés pour ce type de procédure sont les mêmes que pour une procédure stockée. Pour plus d’informations, voir CALL (avec procédure anonyme).

Création d’une procédure stockée

Vous créez une procédure stockée en suivant les étapes suivantes :

  1. Écrivez le code du gestionnaire qui s’exécute lorsque la procédure est appelée.

    Vous pouvez utiliser l’un des langages du gestionnaire pris en charge. Pour plus d’informations, voir Langues acceptées.

  2. Choisissez si vous allez garder le code du gestionnaire en ligne avec l’instruction CREATE PROCEDURE SQL ou si vous allez y faire référence dans une zone de préparation.

    Chacun a ses avantages. Pour plus d’informations, voir Conserver le code du gestionnaire en ligne ou dans une zone de préparation.

  3. Exécutez une instruction CREATE PROCEDURE dans SQL, en spécifiant les propriétés de la procédure.

    Le code de l’exemple suivant crée une procédure appelée myProc avec un gestionnaire en ligne MyClass.myMethod. Le langage du gestionnaire est Java, qui (comme les gestionnaires de procédures écrits en Scala et Python) nécessite un objet Session de la bibliothèque Snowpark. Ici, la clause PACKAGES fait référence à la bibliothèque Snowpark incluse dans Snowflake.

    CREATE OR REPLACE PROCEDURE myProc(fromTable STRING, toTable STRING, count INT)
      RETURNS STRING
      LANGUAGE JAVA
      RUNTIME_VERSION = '11'
      PACKAGES = ('com.snowflake:snowpark:latest')
      HANDLER = 'MyClass.myMethod'
      AS
      $$
        import com.snowflake.snowpark_java.*;
    
        public class MyClass
        {
          public String myMethod(Session session, String fromTable, String toTable, int count)
          {
            session.table(fromTable).limit(count).write().saveAsTable(toTable);
            return "Success";
          }
        }
      $$;
    
    Copy

    Les paragraphes suivants décrivent certaines des propriétés requises ou généralement utilisées lors de la création d’une procédure.

    • Nom de la procédure.

      Le nom de ne doit pas nécessairement correspondre au nom de la méthode du gestionnaire. L’instruction CREATE PROCEDURE associe le nom de la procédure au gestionnaire.

      Pour plus d’informations sur les contraintes et les conventions relatives aux noms, voir Nommage et surcharge de procédures et d’UDFs.

    • Les arguments de la procédure, le cas échéant.

      Voir Définition des arguments pour UDFs et les procédures stockées.

    • Type de retour avec la clause RETURNS.

      Pour plus d’informations sur la façon dont Snowflake fait correspondre les types de données SQL aux types de données des gestionnaires, voir Mappages de type de données SQL-Java.

    • Nom du gestionnaire avec la clause HANDLER.

      Si nécessaire, il s’agit du nom de la classe ou de la méthode contenant le code qui s’exécute lorsque la procédure est appelée. Vous devez spécifier un nom de gestionnaire uniquement pour les gestionnaires écrits en Java, Python et Scala. Pour les gestionnaires JavaScript et Snowflake Scripting, tout le code spécifié en ligne sera exécuté comme le gestionnaire.

      Le tableau suivant décrit la forme de la valeur de la clause HANDLER en fonction du langage du gestionnaire.

      Langage du gestionnaire

      Forme de valeur

      Java

      Nom de la classe et de la méthode.

      Par exemple : MyClass.myMethod

      JavaScript

      Aucun.

      Python

      Nom de la classe et de la méthode si une classe est utilisée ; sinon, nom de la fonction.

      Par exemple : module.my_function ou my_function

      Scala

      Nom de l’objet et de la méthode.

      Par exemple : MyObject.myMethod

      Exécution de scripts Snowflake

      Aucun.

    • Dépendances requises par le gestionnaire, le cas échéant, en utilisant les clauses IMPORTS ou PACKAGES.

      Pour un gestionnaire écrit en Java, Python ou Scala, veillez à spécifier la bibliothèque Snowpark, comme décrit dans la référence CREATE PROCEDURE.

      Pour plus d’informations sur la mise à disposition des dépendances pour votre gestionnaire, voir Mettre les dépendances à la disposition de votre code.

    • Exécution du langage du gestionnaire avec la clause RUNTIME_VERSION.

      Lorsque le langage du gestionnaire est Java, Python ou Scala, utilisez la clause RUNTIME_VERSION pour spécifier la version d’exécution prise en charge à utiliser. En omettant la clause, Snowflake utilisera la valeur par défaut, qui peut changer à l’avenir.

Exemples

Gestionnaire en ligne

Le code de l’exemple suivant crée une procédure appelée my_proc avec une fonction de gestion Python en ligne run. Grâce à la clause PACKAGES, le code fait référence à la bibliothèque Snowpark incluse pour Python, dont la clause Session est requise lorsque Python est le langage de gestion des procédures.

CREATE OR REPLACE PROCEDURE my_proc(from_table STRING, to_table STRING, count INT)
  RETURNS STRING
  LANGUAGE PYTHON
  RUNTIME_VERSION = '3.8'
  PACKAGES = ('snowflake-snowpark-python')
  HANDLER = 'run'
  AS
    $$
      def run(session, from_table, to_table, count):
        session.table(from_table).limit(count).write.save_as_table(to_table)
        return "SUCCESS"
    $$;
Copy

Gestion dans la zone de préparation

Le code de l’exemple suivant crée une procédure appelée my_proc avec une méthode de gestionaire Java mise en zone de préparation MyClass.myMethod. Grâce à la clause PACKAGES, le code fait référence à la bibliothèque Snowpark incluse pour Java, dont la clause Session est requise lorsque Java est le langage de gestion des procédures. Avec la clause IMPORTS, le code fait référence au fichier JAR en zone de préparation contenant le code du gestionnaire.

CREATE OR REPLACE PROCEDURE my_proc(fromTable STRING, toTable STRING, count INT)
  RETURNS STRING
  LANGUAGE JAVA
  RUNTIME_VERSION = '11'
  PACKAGES = ('com.snowflake:snowpark:latest')
  IMPORRTS = ('@mystage/myjar.jar')
  HANDLER = 'MyClass.myMethod';
Copy