Обсуждение: Obtain boolean value of expression in PLPGSQL
Hello My task is to validate expression and get value of it in boolean variable. I try to do following: CREATE OR REPLACE FUNCTION get_value(integer) RETURNS boolean AS' DECLARE Ret boolean; Op TEXT = ''=''; BEGIN Ret := 3 || Op || $1; RETURN Ret; END; ' language 'plpgsql'; when I try to execute this function I get such result: bill=# select get_value(3); WARNING: Error occurred while executing PL/pgSQL function get_value WARNING: line 6 at assignment ERROR: Bad boolean external representation '3=3' bill=# So, how can I explain that resulting type must be boolean ? Also, I try to play with SELECT INTO with same result. -- ... All opinions expressed are mine and not those of my employer. Yours, Max [Msg N 2419] ------------------------------------------- mailto: mx@lucky.net phone: +380-44-2054455
On Tuesday 04 November 2003 10:06, Max Speransky wrote: > Hello > > My task is to validate expression and get value of it in boolean variable. > I try to do following: > Ret := 3 || Op || $1; > RETURN Ret; > bill=# select get_value(3); > WARNING: Error occurred while executing PL/pgSQL function get_value > WARNING: line 6 at assignment > ERROR: Bad boolean external representation '3=3' The problem is that your expression is being evaluated as a string. In the absence of an eval() function, you probably should do something like: my_stmt := ''SELECT '' || 3 || Op || $1; EXECUTE my_stmt; FOR EACH ... So - build a simple query, execute it and read the result. Should do what you want. -- Richard Huxton Archonet Ltd
Hello You are on wrong way. Try like DECLARE b RECORD; s TEXT; op TEXT; BEGIN op := ''=''; s := ''SELECT 3 ''|| op || ''|| $1 || ''AS b''; FOR b IN EXECUTE s LOOP RETURN b.b; END LOOP; END; Regards Pavel On Tue, 4 Nov 2003, Max Speransky wrote: > Hello > > My task is to validate expression and get value of it in boolean variable. > I try to do following: > CREATE OR REPLACE FUNCTION get_value(integer) RETURNS boolean AS' > DECLARE > Ret boolean; > Op TEXT = ''=''; > BEGIN > > Ret := 3 || Op || $1; > RETURN Ret; > END; > ' language 'plpgsql'; > > when I try to execute this function I get such result: > > bill=# select get_value(3); > WARNING: Error occurred while executing PL/pgSQL function get_value > WARNING: line 6 at assignment > ERROR: Bad boolean external representation '3=3' > bill=# > > So, how can I explain that resulting type must be boolean ? Also, I try to > play with SELECT INTO with same result. > >
Max Speransky said: > Hello > > My task is to validate expression and get value of it in boolean variable. [snip] > when I try to execute this function I get such result: > > bill=# select get_value(3); > WARNING: Error occurred while executing PL/pgSQL function get_value > WARNING: line 6 at assignment > ERROR: Bad boolean external representation '3=3' || is the string concatenation operator - so your expression creates a string "3=3" and then tries to return that as a boolean hence the error. if you cannot just do "return 3 = $1;" perhaps you could try using EXECUTE? cheers Martin