Thread: postgresql 8.01, plpgsql
i have the following function in plpgsql giving stynax errors all over the place. i have doen createlang on the db, as far as i can see i'm right. is there anything obviously wrong? one thing to note is i followed this example http://www.zigo.dhs.org/postgresql/#insert_or_update and it gives the same errors. "ERROR: unterminated dollar-quoted string at or near "$$ BEGINLOOP" CREATE OR REPLACE FUNCTION insert_update_daily_takings (ID BIGINT, TillName VARCHAR, Tape NUMERIC(10,2), Cash NUMERIC(10,2), GM NUMERIC(10,2), VenueManager NUMERIC(10,2), AsstManager NUMERIC(10,2), BarManager NUMERIC(10,2), PRCards NUMERIC(10,2), otherPromo NUMERIC(10,2), Functions NUMERIC(10,2), Accounts NUMERIC(10,2), Spill NUMERIC(10,2), Orings NUMERIC(10,2), Variance NUMERIC(10,2) ) RETURNS VOID AS $$ BEGIN LOOP UPDATE daily_takings SET till_name = TillName, tape = Tape, cash = Cash, promo_manager = GM, venue_manager = VenueManager, asst_manager = AsstManager, bar_manager = BarManager, pr_cards = PRCards, other_promo = otherPromo, functions = Functions, accounts = Accounts, spill = Spill, o_rings = Orings, variance = Variance WHERE id = ID AND till_name = TillName; IF foundTHEN RETURN; END IF; BEGIN INSERT INTO daily_takings (id, till_name, tape, cash, promo_manager, venue_manager, asst_manager, bar_manager, pr_cards, other_promo, functions, accounts, spill, o_rings, variance) VALUES (ID, TillName, Tape, Cash, GM, VenueManager, AsstManager, BarManager, PRCards, otherPromo, Functions, Accounts, Spill, Orings, Variance); RETURN; EXCEPTION WHEN unique_violation THEN NULL END; END LOOP; END; $$ LANGUAGE plpgsql;
On Tue, Mar 15, 2005 at 11:35:13AM +1000, Timothy Smith wrote: > i have the following function in plpgsql giving stynax errors all over > the place. When I load the function you posted I get this: test=> \i foo.sql psql:foo.sql:87: ERROR: syntax error at or near "END" at character 2851 psql:foo.sql:87: LINE 83: END; psql:foo.sql:87: ^ If I add a semicolon to the NULL statement in the exception handler then it loads successfully. > one thing to note is i followed this example > http://www.zigo.dhs.org/postgresql/#insert_or_update and it gives the > same errors. I get no errors loading the example in the "Insert or Update" section of that page. > "ERROR: unterminated dollar-quoted string at or near "$$ > BEGIN > LOOP" This looks like the parser is reaching EOF before the end of the function body. How are you loading the function? I usually store code in a file and use "psql -f filename" from the shell or "\i filename" from the psql prompt. If you're not already doing that, what happens when you try it? -- Michael Fuhr http://www.fuhr.org/~mfuhr/
Michael Fuhr wrote: >On Tue, Mar 15, 2005 at 11:35:13AM +1000, Timothy Smith wrote: > > > >>i have the following function in plpgsql giving stynax errors all over >>the place. >> >> > >When I load the function you posted I get this: > >test=> \i foo.sql >psql:foo.sql:87: ERROR: syntax error at or near "END" at character 2851 >psql:foo.sql:87: LINE 83: END; >psql:foo.sql:87: ^ > >If I add a semicolon to the NULL statement in the exception handler >then it loads successfully. > > > >>one thing to note is i followed this example >>http://www.zigo.dhs.org/postgresql/#insert_or_update and it gives the >>same errors. >> >> > >I get no errors loading the example in the "Insert or Update" section >of that page. > > > >>"ERROR: unterminated dollar-quoted string at or near "$$ >>BEGIN >>LOOP" >> >> > >This looks like the parser is reaching EOF before the end of the >function body. How are you loading the function? I usually store code >in a file and use "psql -f filename" from the shell or "\i filename" >from the psql prompt. If you're not already doing that, what happens >when you try it? > > > ok i tried loading it from a file like you suggested and this is what i got for MY function \i /home/timothy/function psql:/home/timothy/function:35: ERROR: unterminated dollar-quoted string at or near "$$ BEGIN LOOP UPDATE daily_takings SET till_name = TillName, tape = Tape, cash = Cash, promo_manager = GM, venue_manager = VenueManager, asst_manager = AsstManager, bar_manager = BarManager, pr_cards = PRCards, other_promo= otherPromo, functions = Functions, accounts = Accounts, spill = Spill, o_rings = Orings, variance = Variance WHERE id = ID AND till_name =TillName;" at character 604 psql:/home/timothy/function:37: ERROR: syntax error at or near "IF" at character 3 psql:/home/timothy/function:38: ERROR: syntax error at or near "IF" at character 7 psql:/home/timothy/function:70: ERROR: syntax error at or near "INSERT" at character 13 psql:/home/timothy/function:71: ERROR: syntax error at or near "RETURN" at character 4 psql:/home/timothy/function:74: ERROR: syntax error at or near "EXCEPTION" at character 3 psql:/home/timothy/function:75: ERROR: syntax error at or near "LOOP" at character 6 psql:/home/timothy/function:76: WARNING: there is no transaction in progress COMMIT psql:/home/timothy/function:78: ERROR: unterminated dollar-quoted string at or near "$$ LANGUAGE plpgsql;" at character 1 and similarly for the example i got \i /home/timothy/function psql:/home/timothy/function:1: ERROR: unterminated dollar-quoted string at or near "$$ BEGIN LOOP UPDATE db SET b = data WHERE a = key;" at character 63 psql:/home/timothy/function:1: ERROR: syntax error at or near "IF" at character 2 psql:/home/timothy/function:1: ERROR: syntax error at or near "IF" at character 6 psql:/home/timothy/function:2: ERROR: syntax error at or near "INSERT" at character 8 psql:/home/timothy/function:2: ERROR: syntax error at or near "RETURN" at character 2 psql:/home/timothy/function:2: ERROR: syntax error at or near "EXCEPTION" at character 2
On Tue, Mar 15, 2005 at 01:38:00PM +1000, Timothy Smith wrote: > ok i tried loading it from a file like you suggested and this is what i > got for MY function > > \i /home/timothy/function > psql:/home/timothy/function:35: ERROR: unterminated dollar-quoted > string at or near "$$ Could you attach the files you're reading? It might be helpful if we could see everything you're trying to execute. What version of PostgreSQL are you using? Presumably 8.X since you're using dollar quoting. -- Michael Fuhr http://www.fuhr.org/~mfuhr/
Timothy Smith wrote: > i have the following function in plpgsql giving stynax errors all over > the place. > i have doen createlang on the db, as far as i can see i'm right. is > there anything obviously wrong? > one thing to note is i followed this example > http://www.zigo.dhs.org/postgresql/#insert_or_update and it gives the > same errors. > > "ERROR: unterminated dollar-quoted string at or near "$$ > BEGIN > LOOP" > > > CREATE OR REPLACE FUNCTION insert_update_daily_takings (ID BIGINT, > TillName VARCHAR, > Tape > NUMERIC(10,2), > Cash > NUMERIC(10,2), > GM NUMERIC(10,2), > VenueManager > NUMERIC(10,2), > AsstManager > NUMERIC(10,2), > BarManager > NUMERIC(10,2), > PRCards > NUMERIC(10,2), > otherPromo > NUMERIC(10,2), > Functions > NUMERIC(10,2), > Accounts > NUMERIC(10,2), > Spill > NUMERIC(10,2), > Orings > NUMERIC(10,2), > Variance > NUMERIC(10,2) > ) RETURNS VOID AS > $$ > BEGIN > LOOP > UPDATE daily_takings SET till_name = TillName, > tape = Tape, > cash = Cash, > promo_manager = GM, > venue_manager = VenueManager, > asst_manager = AsstManager, > bar_manager = BarManager, > pr_cards = PRCards, > other_promo = otherPromo, > functions = Functions, > accounts = Accounts, > spill = Spill, > o_rings = Orings, > variance = Variance > WHERE id = ID > AND till_name = TillName; > IF found THEN > RETURN; > END IF; > BEGIN > INSERT INTO daily_takings (id, > till_name, > tape, > cash, > promo_manager, > venue_manager, > asst_manager, > bar_manager, > pr_cards, > other_promo, > functions, > accounts, > spill, > o_rings, > variance) > VALUES (ID, > TillName, > Tape, > Cash, > GM, > VenueManager, > AsstManager, > BarManager, > PRCards, > otherPromo, > Functions, > Accounts, > Spill, > Orings, > Variance); > RETURN; > EXCEPTION WHEN unique_violation THEN > NULL > END; > END LOOP; > END; > $$ > LANGUAGE plpgsql; > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > >