CALL - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

CALL

Exécute une procédure stockée. La CALL commande doit inclure le nom de la procédure et les valeurs des arguments d'entrée. Vous devez appeler une procédure stockée à l'aide de l'CALLinstruction.

Note

CALLne peut faire partie d'aucune requête régulière.

Syntaxe

CALL sp_name ( [ argument ] [, ...] )

Paramètres

sp_name

Nom de la procédure à exécuter.

argument

Type de valeur de l’argument en entrée. Ce paramètre peut également être un nom de fonction, par exemple pg_last_query_id(). Vous ne pouvez pas utiliser de requêtes comme CALL arguments.

Notes d’utilisation

Les procédures stockées Amazon Redshift prennent en charge les appels imbriqués et récursifs, comme décrit ci-dessous. En outre, assurez-vous que l'assistance de votre chauffeur est up-to-date également décrite ci-dessous.

Appels imbriqués

Les procédures stockées Amazon Redshift prennent en charge les appels imbriqués et récursifs. Le nombre maximal de niveaux d’imbrication autorisé est 16. Les appels imbriqués peuvent encapsuler la logique métier en procédures plus petites, pouvant être partagées par plusieurs appelants.

Si vous appelez une procédure imbriquée dotée de paramètres de sortie, la procédure interne doit définir des INOUT arguments. Dans ce cas, la procédure interne est transmise dans une variable non constante. OUTles arguments ne sont pas autorisés. Ce comportement se produit car une variable est nécessaire pour contenir la sortie de l’appel interne.

Cette relation entre les procédures internes et externes est enregistrée dans la colonne from_sp_call de SVL_STORED_PROC_CALL.

L'exemple suivant montre comment transmettre des variables à un appel de procédure imbriquée via des INOUT arguments.

CREATE OR REPLACE PROCEDURE inner_proc(INOUT a int, b int, INOUT c int) LANGUAGE plpgsql AS $$ BEGIN a := b * a; c := b * c; END; $$; CREATE OR REPLACE PROCEDURE outer_proc(multiplier int) LANGUAGE plpgsql AS $$ DECLARE x int := 3; y int := 4; BEGIN DROP TABLE IF EXISTS test_tbl; CREATE TEMP TABLE test_tbl(a int, b varchar(256)); CALL inner_proc(x, multiplier, y); insert into test_tbl values (x, y::varchar); END; $$; CALL outer_proc(5); SELECT * from test_tbl; a | b ----+---- 15 | 20 (1 row)

Prise en charge du pilote

Nous vous recommandons de mettre à niveau vos pilotes Java Database Connectivity (JDBC) et Open Database Connectivity (ODBC) vers la dernière version compatible avec les procédures stockées Amazon Redshift.

Vous pouvez peut-être utiliser votre pilote existant si votre outil client utilise des API opérations de pilote qui transmettent l'CALLinstruction au serveur. Les paramètres de sortie, le cas échéant, sont renvoyés sous la forme d’un ensemble de résultats d’une ligne.

Les dernières versions d'Amazon Redshift JDBC et des ODBC pilotes prennent en charge les métadonnées pour la découverte des procédures stockées. Elles offrent également une prise en charge CallableStatement pour les applications Java personnalisées. Pour plus d'informations sur les pilotes, consultez la section Connexion à un cluster Amazon Redshift à l'aide des outils SQL client dans le guide de gestion Amazon Redshift.

Les exemples suivants montrent comment utiliser différentes API opérations du JDBC pilote pour les appels de procédure stockée.

void statement_example(Connection conn) throws SQLException { statement.execute("CALL sp_statement_example(1)"); } void prepared_statement_example(Connection conn) throws SQLException { String sql = "CALL sp_prepared_statement_example(42, 84)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.execute(); } void callable_statement_example(Connection conn) throws SQLException { CallableStatement cstmt = conn.prepareCall("CALL sp_create_out_in(?,?)"); cstmt.registerOutParameter(1, java.sql.Types.INTEGER); cstmt.setInt(2, 42); cstmt.executeQuery(); Integer out_value = cstmt.getInt(1); }

Exemples

L’exemple suivant appelle le nom de procédure test_spl.

call test_sp1(3,'book'); INFO: Table "tmp_tbl" does not exist and will be skipped INFO: min_val = 3, f2 = book

L’exemple suivant appelle le nom de procédure test_spl2.

call test_sp2(2,'2019'); f2 | column2 ---------------------+--------- 2019+2019+2019+2019 | 2 (1 row)