Utiliser une procédure stockée
Une procédure stockée est un sous-programme disponible pour les applications qui accèdent à un système de base de données relationnelle. Lors d’une connexion à une base de données SAP Sybase ASE, Microsoft SQL Server ou Teradata avec Tableau, il est possible d’utiliser une procédure stockée pour définir la connexion.
Pour Oracle, vous pouvez utiliser une fonction de table pour définir la connexion. Les fonctions de table Oracle fonctionnent de la même manière que les procédures stockées et sont répertoriées sous Procédures stockées dans la page Source de données.
Lorsque vous créez une source de données en utilisant l’un de ces types de données, les procédures disponibles sont répertoriées sous Procédures stockées, comme montré dans l’exemple Microsoft SQL Server :
À partir du volet de gauche, faites glisser la procédure vers le canevas ou double-cliquez sur l’une des procédures de la liste. La boîte de dialogue Paramètres s’affiche automatiquement si les paramètres sont disponibles dans la procédure.
Au lieu d’entrer une valeur, il est possible d’utiliser un paramètre Tableau existant ou d’en créer un nouveau :
Si vous intégrez ensuite le paramètre Tableau à la vue, les utilisateurs peuvent modifier la valeur du paramètre dans la procédure de manière interactive.
Les procédures stockées ne prennent en charge la fédération, les relations ou les jointures. Elles sont représentées dans une seule table logique dans la couche logique et ne permettent pas d’ouvrir l’espace de travail Jointure/Union (couche physique).
Remarques sur les procédures stockées
Si vous utilisez des procédures stockées pour définir une source de données pour Tableau, gardez ce qui suit à l’esprit :
si une procédure stockée renvoie plusieurs ensembles de résultats, Tableau lit le premier et ignore les autres.
Si une procédure stockée dispose de paramètres de sortie, elle est filtrée par Tableau.
Les procédures stockées présentant des paramètres de type non scalaire sont exclues.
Les colonnes d’ensembles de résultats qui ne disposent d’aucun type correspondant dans Tableau (tel que varbinary, geometry et hierarchyid) sont enregistrées dans le journal. Si toutes les colonnes d’ensembles de résultats mappent vers des types de données inconnus, Tableau affiche un message :
" The result set... has no usable columns » (L’ensemble de résultats... ne présente aucune colonne utilisable).
Les procédures stockées qui ne renvoient aucun ensemble de résultats sont répertoriées sur la page des sources de données, mais échouent si elles sont sélectionnées.
Si un paramètre exigé par la procédure stockée ne présente aucune valeur, une erreur se produit. Tableau ne peut pas déterminer à l’avance si des paramètres sont exigés.
Tableau n’effectue aucune gestion de transaction pour les procédures stockées. En d’autres termes, les créateurs de procédures stockées ne doivent pas dépendre de Tableau pour démarrer des transactions avant d’invoquer des procédures stockées ou de les réaliser après coup.
Les noms de colonnes doivent être uniques pour que les procédures stockées fonctionnent. Si deux colonnes portent le même nom, ou si aucun nom n’est indiqué, la procédure peut générer une erreur.
Si une procédure stockée contient plusieurs requêtes (par exemple, pour lire des valeurs à partir d’une autre table ou pour maintenir des combinaisons temporaires), chaque requête doit renvoyer les mêmes ensembles de colonnes dans le même ordre (mêmes noms et types de données). Pour vous assurer que l’ordre des colonnes et les noms correspondent dans les résultats de requêtes, vous pouvez avoir besoin d’utiliser
CAST
de manière explicite pour vous assurer que le type de données est correct, par exempleCAST(Username as VARCHAR(20))
, puis de nommer les colonnes de manière explicite. Si une procédure stockée ne respecte pas ces directives, cela peut entraîner un message d’erreur :"InsertData : erreur de colonne indépendante"
Si une procédure stockée contient plusieurs requêtes (par exemple, pour lire les valeurs à partir d’une autre table ou pour maintenir des combinaisons temporaires) et que la procédure génère une erreur, essayez d’ajouter
SET NOCOUNT ON
en haut de la procédure. Cela permet d’empêcher le message indiquant le nombre de lignes affectées par une déclaration Transact-SQL d’être renvoyé comme faisant partie du résultat défini pour une requête.
En outre, les contraintes suivantes s’appliquent aux bases de données spécifiques.
Contraintes des procédures stockées pour les bases de données Teradata
Les contraintes suivantes s’appliquent aux procédures stockées sur des bases de données Teradata.
Chaque paramètre doit présenter une valeur. Si l’utilisateur ne fournit aucune valeur à un ou plusieurs paramètres, Tableau affiche une erreur de base de données Teradata qui indique que le nombre de valeurs fournies pour la procédure stockée est trop faible.
Contraintes des procédures stockées pour les bases de données SQL Server
Les contraintes suivantes s’appliquent aux procédures stockées sur des bases de données SQL Server.
Si l’ensemble de résultats d’une procédure stockée contient des colonnes de type IMAGE ou TEXT, la procédure stockée échoue et renvoie un message d’erreur « Incorrect syntax » (Syntaxe incorrecte).
Si la largeur totale de l’ensemble de résultats (nombre de bits sur chaque ligne) dépasse 8 060, la procédure stockée échoue. Cela peut se produire en cas de tables très larges (contenant des centaines de colonnes) ou présentant des colonnes de texte larges, prévues pour contenir des milliers de caractères.
Tableau n’affiche pas les procédures stockées à partir de « sys » de schémas.
Si l’utilisateur ne renseigne aucun des paramètres exigés par la procédure, Tableau affiche une erreur de base de données SQL Server sous la forme « The procedure requires a value for parameter @x but one was not provided » (La procédure exige une valeur pour le paramètre @x, mais aucune n’était fournie).
Les procédures stockées contenant plusieurs requêtes doivent respecter les directives répertoriées dans Remarques sur les procédures stockées (ci-dessus).
Tableau Desktop ne prend pas en charge le type de données TIME de Microsoft SQL Server. Lorsque des champs de ce type sont inclus dans une procédure stockée sur une base de données Microsoft SQL Server Tableau Desktop les importe.
Contraintes des procédures stockées pour les bases de données SAP Sybase ASE
Les contraintes suivantes s’appliquent aux procédures stockées sur des bases de données SAP Sybase ASE (Windows uniquement).
La base de données doit disposer d’un serveur distant correctement configuré.
Si l’utilisateur ne renseigne aucun des paramètres exigés par la procédure, Tableau affiche une erreur de base de données Sybase ASE sous la forme « The procedure requires a value for parameter @x but one was not provided » (La procédure exige une valeur pour le paramètre @x, mais aucune n’était fournie).