PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Déclarer une variable de type composite dans PostgreSQL en utilisant %TYPE

Utilisez %ROWTYPE dans ce cas.

Modifier - cas simple

Les tests effectués par A.H. et DavidEG ont montré que cela ne fonctionnerait pas. Problème intéressant !
Vous pouvez essayer une solution de contournement . Tant que votre définition ressemble à l'exemple, vous pouvez simplement recourir à

CREATE FUNCTION test(param1 comp_type)
  RETURNS integer AS
$BODY$ 
DECLARE
    myvar comp_type;
BEGIN
    return 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Mais votre vrai problème n'est probablement pas aussi simple que ça ?

Edit 2 - le vrai problème

Comme prévu, le vrai problème est plus complexe :un type d'entrée polymorphe .
Solution car ce scénario était plus difficile, mais devrait fonctionner parfaitement :

CREATE FUNCTION test(param1 anyelement, OUT a integer, OUT myvar anyelement)
  RETURNS record AS
$BODY$
BEGIN
    myvar := $1;  -- myvar has now the required type.

    --- do stuff with myvar.

    myvar := NULL;  -- reset if you don't want to output ..
    a := 1;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

Appel :

SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar

Afficher le résultat complet :

SELECT * FROM test('("foo")'::comp_type);

Remarque pour PostgreSQL 9.0+

Il y a eu une mise à jour cruciale dans la v9.0. Je cite les notes de version :

Par conséquent, en plus de ma solution de contournement, vous pouvez utiliser directement les variables d'entrée.

Noms de fichiers dynamiques