NEW used in a query that is not in a rule

Started by Gaetano Mendolaover 21 years ago4 messages
#1Gaetano Mendola
mendola@bigfoot.com

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi all,
I'm bouncing on the following problem, I don't know if is a bug or if exist a different
way to do it.
The following code is not meaningfull but it's an extract of what I'm trying to do:

CREATE TABLE foo ( field1 INTEGER );

CREATE OR REPLACE FUNCTION trigger_foo()
RETURNS TRIGGER AS'
DECLARE

~ my_field TEXT;
~ my_stat TEXT;

BEGIN

~ my_field = TG_ARGV[0];

~ my_stat = ''SELECT field1 FROM foo where field1 = NEW.'' || my_field;

~ EXECUTE my_stat;

~ RETURN NEW;

END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER check_foo
BEFORE INSERT ON foo
FOR EACH ROW EXECUTE PROCEDURE trigger_foo('field1');

insert into foo values ( 3 );

I got the error in the subject, it's like the EXECUTE open another contest and
forget that is inside a rule.

Any idea someone ?

Regards
Gaetano Mendola

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFBRzm37UpzwH2SGd4RAnObAKD4G6S6MdvaYsGxjS88sn+u2OJqagCg86ut
tsa/AXBfKtB12sCPBIwJAYc=
=G2DY
-----END PGP SIGNATURE-----

#2Passynkov, Vadim
Vadim.Passynkov@pathcom.com
In reply to: Gaetano Mendola (#1)
Re: NEW used in a query that is not in a rule

I am also don't know how use NEW,OLD in plpgsql
but in pltcl possible to use $NEW($my_field), $OLD($my_field)

--
Vadim Passynkov

-----Original Message-----
From: Gaetano Mendola [mailto:mendola@bigfoot.com]
Sent: Tuesday, September 14, 2004 2:35 PM
To: pgsql-hackers@postgresql.org
Subject: [HACKERS] NEW used in a query that is not in a rule

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi all,
I'm bouncing on the following problem, I don't know if is a bug or if exist
a different
way to do it.
The following code is not meaningfull but it's an extract of what I'm trying
to do:

CREATE TABLE foo ( field1 INTEGER );

CREATE OR REPLACE FUNCTION trigger_foo()
RETURNS TRIGGER AS'
DECLARE

~ my_field TEXT;
~ my_stat TEXT;

BEGIN

~ my_field = TG_ARGV[0];

~ my_stat = ''SELECT field1 FROM foo where field1 = NEW.'' || my_field;

~ EXECUTE my_stat;

~ RETURN NEW;

END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER check_foo
BEFORE INSERT ON foo
FOR EACH ROW EXECUTE PROCEDURE trigger_foo('field1');

insert into foo values ( 3 );

I got the error in the subject, it's like the EXECUTE open another contest
and
forget that is inside a rule.

Any idea someone ?

Regards
Gaetano Mendola

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFBRzm37UpzwH2SGd4RAnObAKD4G6S6MdvaYsGxjS88sn+u2OJqagCg86ut
tsa/AXBfKtB12sCPBIwJAYc=
=G2DY
-----END PGP SIGNATURE-----

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

#3Oliver Elphick
olly@lfix.co.uk
In reply to: Gaetano Mendola (#1)
Re: NEW used in a query that is not in a rule

On Tue, 2004-09-14 at 19:34, Gaetano Mendola wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi all,
I'm bouncing on the following problem, I don't know if is a bug or if exist a different
way to do it.
The following code is not meaningfull but it's an extract of what I'm trying to do:

CREATE TABLE foo ( field1 INTEGER );

CREATE OR REPLACE FUNCTION trigger_foo()
RETURNS TRIGGER AS'
DECLARE

~ my_field TEXT;
~ my_stat TEXT;

BEGIN

~ my_field = TG_ARGV[0];

~ my_stat = ''SELECT field1 FROM foo where field1 = NEW.'' || my_field;

My guess is that you are having this problem because you are executing a
query referring to NEW rather than using it directly.

I don't think you can refer to NEW in a command string given to
EXECUTE. You probably need to set up an IF...ELSIF...ELSE...END IF
structure to get the value to put into the command string.

~ EXECUTE my_stat;

~ RETURN NEW;

END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER check_foo
BEFORE INSERT ON foo
FOR EACH ROW EXECUTE PROCEDURE trigger_foo('field1');

insert into foo values ( 3 );

I got the error in the subject, it's like the EXECUTE open another contest and
forget that is inside a rule.

Any idea someone ?

Regards
Gaetano Mendola

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFBRzm37UpzwH2SGd4RAnObAKD4G6S6MdvaYsGxjS88sn+u2OJqagCg86ut
tsa/AXBfKtB12sCPBIwJAYc=
=G2DY
-----END PGP SIGNATURE-----

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

--
Oliver Elphick olly@lfix.co.uk
Isle of Wight http://www.lfix.co.uk/oliver
GPG: 1024D/A54310EA 92C8 39E7 280E 3631 3F0E 1EC0 5664 7A2F A543 10EA
========================================
"But without faith it is impossible to please him; for
he that cometh to God must believe that he is, and
that he is a rewarder of them that diligently seek
him." Hebrews 11:6

#4Gaetano Mendola
mendola@bigfoot.com
In reply to: Oliver Elphick (#3)
Re: NEW used in a query that is not in a rule

Oliver Elphick wrote:

My guess is that you are having this problem because you are executing a
query referring to NEW rather than using it directly.

This for sure, I'm able to use NEW directly but I don't know at definition
time wich field of NEW I have to use.

I don't think you can refer to NEW in a command string given to
EXECUTE. You probably need to set up an IF...ELSIF...ELSE...END IF
structure to get the value to put into the command string.

I can't because the combination are not a limited number.

Regards
Gaetano Mendola