Una stored procedure è una subroutine disponibile per le applicazioni che accedono a un sistema di database relazionale. Quando ti connetti a un database SAP Sybase ASE, Microsoft SQL Server o Teradata con Tableau, puoi utilizzare una stored procedure per definire la connessione.

Per Oracle puoi utilizzare una funzione tabella per definire la connessione. Le funzioni tabella di Oracle agiscono in modo simile alle stored procedure e sono elencate in Stored Procedures nella pagina Origine dati.

Quando crei un'origine dati utilizzando uno di questi tipi di dati, le procedure disponibili sono elencate in Stored Procedures, come illustrato nell'esempio di Microsoft SQL Server:

Dal riquadro di sinistra, trascina la procedura sul canvas o fai doppio clic su una delle procedure elencate. Se i parametri sono disponibili nella procedura, verrà visualizzata automaticamente la finestra di dialogo Parametri. 

Invece di inserire un valore, puoi utilizzare un parametro Tableau esistente o creare un nuovo parametro Tableau per il valore:

Se poi mostri il parametro Tableau nella vista, gli utenti sono in grado di modificare il valore del parametro nella procedura in modo interattivo.

Le stored procedure non supportano la federazione, le relazioni o i join. Sono rappresentate in una singola tabella logica nel livello logico e non consentono l'apertura del canvas di join/unione (livello fisico).

Note sulle stored procedure

Se usi le stored procedure per definire un'origine dati per Tableau, tieni presente quanto segue:

  • se una stored procedure restituisce più di un insieme di risultati, Tableau legge il primo e ignora il resto;

  • se una stored procedure ha parametri di output, Tableau filtra la stored procedure.

  • Sono escluse le stored procedure con parametri di tipo non-scalare.

  • Le colonne dell'insieme di risultati che non hanno tipi corrispondenti in Tableau (come varbinary, geometry e hierarchyid) vengono registrate. Se tutte le colonne predefinite sono associate a tipi di dati sconosciuti, Tableau visualizza un messaggio:

    "L'insieme di risultati ... non ha colonne utilizzabili".

  • Le stored procedure che non restituiscono nessun insieme di risultati sono elencate nella pagina dell'origine dati ma falliscono se vengono selezionate.

  • Se non fornisci alcun valore per un parametro richiesto dalla stored procedure , si verifica un errore. Tableau non può determinare in anticipo se i parametri sono obbligatori.

  • Tableau non esegue alcuna gestione delle transazioni per le stored procedure. In altre parole, gli autori delle stored procedure non devono dipendere da Tableau per avviare le transazioni prima di richiamare le stored procedure o per eseguirle successivamente.

  • I nomi delle colonne devono essere univoci affinché le stored procedure funzionino. Se due colonne hanno lo stesso nome o se non viene fornito alcun nome, la procedura può generare un errore.

  • Se in una stored procedure sono presenti più query, ad esempio per leggere i valori di un'altra tabella o per mantenere le combinazioni temporanee, ogni query deve restituire gli stessi insiemi di colonne nello stesso ordine (nomi e tipi di dati). Per assicurarsi che l'ordine delle colonne e i nomi corrispondano ai risultati della query, può essere necessario eseguire in modo esplicito CAST per assicurarsi che il tipo di dati sia corretto, ad esempio CAST(Username as VARCHAR(20)), e denominare esplicitamente le colonne. Se una stored procedure non rispetta queste linee guida, può comparire un messaggio di errore:

    "InsertData: errore di colonna non associata”

  • Se sono presenti più query in una stored procedure (ad esempio, per leggere valori da un'altra tabella o per conservare combinazioni temporanee) e la procedura genera un errore, prova ad aggiungere SET NOCOUNT ON all'inizio della procedura. Ciò impedisce che il messaggio che mostra il conteggio del numero di righe interessate da un'istruzione Transact-SQL venga reso come parte dell'insieme di risultati per una query.

Inoltre, i seguenti vincoli si applicano a database specifici.

Vincoli della stored procedure per database Teradata

I seguenti vincoli si applicano alle stored procedure sui database Teradata.

  • I valori devono essere forniti per ogni parametro. Se l'utente non fornisce un valore per uno o più parametri, Tableau visualizza un errore del database Teradata che indica che esistono troppo pochi valori forniti per la stored procedure.

Vincoli della stored procedure per database di SQL Server

I vincoli seguenti si applicano alle stored procedure sui database SQL Server.

  • Se l'insieme di risultati per una stored procedure contiene colonne di tipo IMAGE o TEXT, la stored procedure fallisce con un messaggio di errore "Sintassi errata".

  • Se la larghezza totale dell'insieme di risultati (numero di byte in ogni riga) supera 8060, la stored procedure fallisce. Ciò può verificarsi con tabelle molto ampie (centinaia di colonne) o con tabelle con colonne di testo di grandi dimensioni, destinate a contenere migliaia di caratteri di testo.

  • Tableau non visualizza le stored procedure dallo schema "sys”.

  • Se l'utente non fornisce un valore per uno o più parametri richiesti dalla procedura, Tableau visualizza un errore del database di SQL Server nella forma "La procedura richiede un valore per il parametro @x ma non ne è stato fornito uno.”

  • Le stored procedure che contengono più query devono seguire le linee guida elencate in Note sulle Stored Procedure (sopra).

  • Tableau Desktop non supporta il tipo di dati TIME di Microsoft SQL Server. Quando campi di questo tipo sono inclusi in una stored proceduresu un database Microsoft SQL Server, Tableau Desktop non li importa.

Vincoli delle stored procedureper i database SAP Sybase ASE

I seguenti vincoli si applicano alle stored procedure sui database SAP Sybase ASE (solo Windows).

  • Il database deve avere un server remoto correttamente configurato.

  • Se l'utente non fornisce un valore per uno o più parametri richiesti dalla procedura, Tableau visualizza un errore del database Sybase ASE nella forma"La procedura richiede un valore per il parametro @x ma non ne è stato fornito uno.”

Grazie per il tuo feedback.