Обсуждение: variables in procedures
How can I distinguish between the name and the value of a variable?
Example:
CREATE FUNCTION test(VARCHAR) RETURNS INTEGER AS '
DECLARE col1 ALIAS FOR $1
BEGINselect col1 from tab where col1=´´col1´´;
END;
´ LANGUAGE 'plpgsql';
Is my doubt understood?
--
Porqué usar una base de datos relacional cualquiera,
si podés usar PostgreSQL?
-----------------------------------------------------------------
Martín Marqués | mmarques@unl.edu.ar
Programador, Administrador, DBA | Centro de Telematica Universidad Nacional
del Litoral
-----------------------------------------------------------------
Martin, > How can I distinguish between the name and the value of a variable? You need to name your variables something *different* from your column names. Otherwise, you will get unexpected errors. A practice I usually follow is prefixing my column-substitiution variables with "v_". This allows me, and the PL/pgSQL parser, to keep the variables straight from the columns. I also need to fix your procedure in a couple of places. Thus: CREATE FUNCTION test(VARCHAR) RETURNS INTEGER AS ' DECLARE v_col1 ALIAS FOR $1; v_result INT; BEGIN select col1 INTO v_result from tab where col1 = v_col1; RETURN v_result; END;´ LANGUAGE 'plpgsql'; Other SQL-procedural languages (e.g. Transact-SQL) force you to prefix your variables with special characters. In PL/pgSQL, it's up to you to maintain consistency. -Josh Berkus ______AGLIO DATABASE SOLUTIONS___________________________ Josh Berkus Complete informationtechnology josh@agliodbs.com and data management solutions (415) 565-7293 for law firms, small businesses fax 621-2533 and non-profit organizations. San Francisco
On Fri, 30 Nov 2001, [iso-8859-1] Mart�n Marqu�s wrote: > How can I distinguish between the name and the value of a variable? > > Example: > > CREATE FUNCTION test(VARCHAR) RETURNS INTEGER AS ' > > DECLARE > col1 ALIAS FOR $1 > BEGIN > select col1 from tab where col1=��col1��; > END; > � LANGUAGE 'plpgsql'; > > > Is my doubt understood? AFAIK you don't distinguish, you'll probably need to name the variable something else.