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

Postgresql essayant d'utiliser le format d'exécution dans une fonction mais obtenant une erreur de colonne introuvable lors de la transmission du format de chaîne dans coalesce

Cela pourrait faire ce que vous cherchez :

CREATE OR REPLACE FUNCTION foo(_t text)
  RETURNS TABLE (Stage_ID bigint, Date varchar) AS
$func$
   SELECT t.Stage_ID, t.Date
   FROM   tbl t
   WHERE  t.Date = _t::date;
$func$  LANGUAGE sql;
  • L'expression where to_date(Date, "YYYY-MM-DD")==%I',_t); est en arrière de plusieurs façons.

    • Apostrophes pour les valeurs :'YYYY-MM-DD' .
    • L'opérateur est = , pas == .
    • On dirait que vous voulez vraiment t.Date = to_date(_t, 'YYYY-MM-DD')
    • Et pendant que _t est au format ISO standard 'YYYY-MM-DD', plutôt simplement moulé à la place :t.Date = _t::date .
  • Les noms des colonnes de sortie sont visibles dans le corps de la fonction. Colonne qualifiée de table du même nom. Mieux encore, évitez les conflits de noms comme ça pour commencer ! Voir :

  • Pas besoin de SQL dynamique avec EXECUTE . La transmission d'une valeur de données fonctionne parfaitement avec du SQL ordinaire.

  • Pas besoin de plpgsql. La requête simple ne nécessite aucune fonctionnalité procédurale. LANGUAGE sql fait le travail - si vous avez besoin d'une fonction, du SQL simple semblerait tout à fait approprié.

À part :n'utilisez pas de noms de type de base comme "date" comme identifiant. Tenez-vous en aux identificateurs légaux en minuscules. Connexe :