Comment puis-je référence des paramètres nommés dans Postgres sql fonctions?
Postgres noobie ici.
Je suis en train de convertir un Serveur SQL, procédures stockées dans une Postgres fonction. Actuellement, il ne peut comprendre comment transformer cette ligne de SQL dans Postgres.
SQL Server:
input: @name = null
SELECT *
FROM table
WHERE name = ISNULL(@name, name)
Postgres:
input: n = null
SELECT *
FROM table
WHERE name = COALESCE(n, name)
J'obtiens le message d'erreur "de la colonne n n'existe pas." Comment puis-je des paramètres de référence dans les instructions select dans Postgres fonctions?
Mise à JOUR:
Définition de Postgres fonction
CREATE OR REPLACE FUNCTION fn_name (n VARCHAR(32) = NULL, name OUT varchar(32), description OUT varchar(64))
RETURNS setof record
AS
$$
SELECT u.name
, u.description
FROM table_a u
WHERE u.name = COALESCE(n, u.name);
$$
LANGUAGE sql;
OriginalL'auteur Nick Vaccaro | 2012-03-19
Vous devez vous connecter pour publier un commentaire.
RÉVISÉ: Comme l'a souligné dans les commentaires, cette réponse est exacte lorsqu'il est écrit au début de 2012, mais les paramètres nommés ont été pris en charge depuis la v9.2, sorti fin 2012.
Les noms de paramètres sont simplement de la décoration lors de votre fonction est dans le langage SQL. Vous pouvez utiliser les paramètres par nom dans les procédures stockées défini comme
language plpgsql
.Par conséquent, vous devez vous référer à la fonction args à l'aide de $X où X est la position ordinale de la fonction de la liste d'arguments (en commençant par 1).
OriginalL'auteur dbenhur
Vous ne pouvez pas utiliser des paramètres nommés dans une fonction qui est définie avec la langue=SQL.
Vous avez besoin d'utiliser l'espace réservé $1.
Ce comportement est documenté dans le manuel: http://www.postgresql.org/docs/9.0/static/xfunc-sql.html
Modifier
Depuis la version 9.2, il est possible d'utiliser des paramètres nommés (brut) de la fonction SQL
http://www.postgresql.org/docs/9.2/static/xfunc-sql.html#XFUNC-SQL-FUNCTION-ARGUMENTS
OriginalL'auteur a_horse_with_no_name