A plpgsql unidentifiable problem.

Started by Ralph Smithalmost 18 years ago5 messagesgeneral
Jump to latest
#1Ralph Smith
smithrn@washington.edu

I'm baffled and have tried various variations but still nogo.

From PgAdmin III I get:
-------------------------------------------
********** Error **********

ERROR: syntax error at or near ";"
SQL state: 42601
Character: 19001

-- referring to the semi-colon after the 'END' statement.

*******************************
When I check this out in PgAdmin III.
-------------------------------------------
CREATE OR REPLACE FUNCTION time_to_utime(given_time varchar) RETURNS
INT AS
$$

DECLARE

uppergt varchar ;
colon1 int ;
colon2 int ;
digitsA varchar ;
digitsB varchar ;
digitsC varchar ;
numberA int ;
numberB int ;
numberC int ;
result int ;

BEGIN

IF check_time(given_time) = FALSE THEN
RAISE NOTICE 'The time passed into function time_to_utime is not
in a valid format.' ;
END IF ;

-- ----------------------------------------

uppergt := upper(given_time) ;

IF uppergt = 'BOD' THEN RETURN 0 ;
IF uppergt = 'MOD' THEN RETURN 86400/2 ;
IF uppergt = 'EOD' THEN RETURN 86399 ;

-- ----------------------------------------

colon1:=strpos(invar,':') ;
colon2:=colon1+strpos(substring(invar from colon1+1),':') ;

digitsA := split_part(invar,':',1) ;
numberA := to_number(digitsA,'99') ;

digitsB := split_part(invar,':',2) ;
numberB := to_number(digitsB,'99') ;

digitsC := split_part(invar,':',3) ;
numberC := to_number(digitsC,'99') ;

result := 3600*numberA + 60*numberB + numberC ;

RETURN result ;

END ;
$$ LANGUAGE PLPGSQL ; /* time_to_utime */
********************************************

Any clues?

THANKS!

Ralph Smith

#2Philippe Grégoire
philippe.gregoire@boreal-is.com
In reply to: Ralph Smith (#1)
Re: A plpgsql unidentifiable problem.

I think that the IF clauses need END IF.

IF uppergt = 'BOD' THEN RETURN 0; END IF;
IF uppergt = 'MOD' THEN RETURN 86400/2; END IF;
IF uppergt = 'EOD' THEN RETURN 86399; END IF;

This should solve the problem.

Philippe Gregoire
Information Manager
www.boreal-is.com

Ralph Smith wrote:

Show quoted text

I'm baffled and have tried various variations but still nogo.

From PgAdmin III I get:
-------------------------------------------
********** Error **********

ERROR: syntax error at or near ";"
SQL state: 42601
Character: 19001

-- referring to the semi-colon after the 'END' statement.

*******************************
When I check this out in PgAdmin III.
-------------------------------------------
CREATE OR REPLACE FUNCTION time_to_utime(given_time varchar) RETURNS
INT AS
$$

DECLARE

uppergt varchar ;
colon1 int ;
colon2 int ;
digitsA varchar ;
digitsB varchar ;
digitsC varchar ;
numberA int ;
numberB int ;
numberC int ;
result int ;

BEGIN

IF check_time(given_time) = FALSE THEN
RAISE NOTICE 'The time passed into function time_to_utime is not
in a valid format.' ;
END IF ;

-- ----------------------------------------

uppergt := upper(given_time) ;

IF uppergt = 'BOD' THEN RETURN 0 ;
IF uppergt = 'MOD' THEN RETURN 86400/2 ;
IF uppergt = 'EOD' THEN RETURN 86399 ;

-- ----------------------------------------

colon1:=strpos(invar,':') ;
colon2:=colon1+strpos(substring(invar from colon1+1),':') ;

digitsA := split_part(invar,':',1) ;
numberA := to_number(digitsA,'99') ;

digitsB := split_part(invar,':',2) ;
numberB := to_number(digitsB,'99') ;

digitsC := split_part(invar,':',3) ;
numberC := to_number(digitsC,'99') ;

result := 3600*numberA + 60*numberB + numberC ;

RETURN result ;

END ;
$$ LANGUAGE PLPGSQL ; /* time_to_utime */
********************************************

Any clues?

THANKS!

Ralph Smith

------------------------------------------------------------------------

No virus found in this incoming message.
Checked by AVG.
Version: 7.5.524 / Virus Database: 270.4.0/1507 - Release Date: 6/18/2008 7:09 AM

#3Philippe Grégoire
philippe.gregoire@boreal-is.com
In reply to: Philippe Grégoire (#2)
Re: A plpgsql unidentifiable problem.

And the semi-colon should be removed after the END

Philippe

Philippe wrote:

Show quoted text

I think that the IF clauses need END IF.

IF uppergt = 'BOD' THEN RETURN 0; END IF;
IF uppergt = 'MOD' THEN RETURN 86400/2; END IF;
IF uppergt = 'EOD' THEN RETURN 86399; END IF;

This should solve the problem.

Philippe Gregoire
Information Manager
www.boreal-is.com

Ralph Smith wrote:

I'm baffled and have tried various variations but still nogo.

From PgAdmin III I get:
-------------------------------------------
********** Error **********

ERROR: syntax error at or near ";"
SQL state: 42601
Character: 19001

-- referring to the semi-colon after the 'END' statement.

*******************************
When I check this out in PgAdmin III.
-------------------------------------------
CREATE OR REPLACE FUNCTION time_to_utime(given_time varchar) RETURNS
INT AS
$$

DECLARE

uppergt varchar ;
colon1 int ; colon2 int ;
digitsA varchar ;
digitsB varchar ;
digitsC varchar ;
numberA int ;
numberB int ;
numberC int ;
result int ;
BEGIN

IF check_time(given_time) = FALSE THEN
RAISE NOTICE 'The time passed into function time_to_utime is not
in a valid format.' ;
END IF ;

-- ----------------------------------------

uppergt := upper(given_time) ;

IF uppergt = 'BOD' THEN RETURN 0 ;
IF uppergt = 'MOD' THEN RETURN 86400/2 ;
IF uppergt = 'EOD' THEN RETURN 86399 ;

-- ----------------------------------------

colon1:=strpos(invar,':') ;
colon2:=colon1+strpos(substring(invar from colon1+1),':') ;

digitsA := split_part(invar,':',1) ;
numberA := to_number(digitsA,'99') ;
digitsB := split_part(invar,':',2) ;
numberB := to_number(digitsB,'99') ;

digitsC := split_part(invar,':',3) ;
numberC := to_number(digitsC,'99') ;

result := 3600*numberA + 60*numberB + numberC ;

RETURN result ;
END ;
$$ LANGUAGE PLPGSQL ; /* time_to_utime */
********************************************

Any clues?

THANKS!

Ralph Smith

------------------------------------------------------------------------

No virus found in this incoming message.
Checked by AVG. Version: 7.5.524 / Virus Database: 270.4.0/1507 -
Release Date: 6/18/2008 7:09 AM

#4Ralph Smith
smithrn@washington.edu
In reply to: Philippe Grégoire (#2)
Re: A plpgsql unidentifiable problem.

Yes, that was it.

The other QUITE similar language I've used didn't require the END IF
if it was a one-liner.
You can bet I won't forget that one again - or longer than it takes to
goof up and rediscover it!

Thanks!
Ralph
============================================
On Jun 19, 2008, at 12:49 PM, Philippe Grégoire wrote:

Show quoted text

I think that the IF clauses need END IF.

IF uppergt = 'BOD' THEN RETURN 0; END IF;
IF uppergt = 'MOD' THEN RETURN 86400/2; END IF;
IF uppergt = 'EOD' THEN RETURN 86399; END IF;

This should solve the problem.

Philippe Gregoire
Information Manager
www.boreal-is.com

Ralph Smith wrote:

I'm baffled and have tried various variations but still nogo.

From PgAdmin III I get:
-------------------------------------------
********** Error **********

ERROR: syntax error at or near ";"
SQL state: 42601
Character: 19001

-- referring to the semi-colon after the 'END' statement.

*******************************
When I check this out in PgAdmin III.
-------------------------------------------
CREATE OR REPLACE FUNCTION time_to_utime(given_time varchar)
RETURNS INT AS
$$

DECLARE

uppergt varchar ;
colon1 int ; colon2 int ;
digitsA varchar ;
digitsB varchar ;
digitsC varchar ;
numberA int ;
numberB int ;
numberC int ;
result int ;
BEGIN

IF check_time(given_time) = FALSE THEN
RAISE NOTICE 'The time passed into function time_to_utime is not
in a valid format.' ;
END IF ;

-- ----------------------------------------

uppergt := upper(given_time) ;

IF uppergt = 'BOD' THEN RETURN 0 ;
IF uppergt = 'MOD' THEN RETURN 86400/2 ;
IF uppergt = 'EOD' THEN RETURN 86399 ;

-- ----------------------------------------

colon1:=strpos(invar,':') ;
colon2:=colon1+strpos(substring(invar from colon1+1),':') ;

digitsA := split_part(invar,':',1) ;
numberA := to_number(digitsA,'99') ;
digitsB := split_part(invar,':',2) ;
numberB := to_number(digitsB,'99') ;

digitsC := split_part(invar,':',3) ;
numberC := to_number(digitsC,'99') ;

result := 3600*numberA + 60*numberB + numberC ;

RETURN result ;
END ;
$$ LANGUAGE PLPGSQL ; /* time_to_utime */
********************************************

Any clues?

THANKS!

Ralph Smith

------------------------------------------------------------------------

No virus found in this incoming message.
Checked by AVG. Version: 7.5.524 / Virus Database: 270.4.0/1507 -
Release Date: 6/18/2008 7:09 AM

#5Igor Neyman
ineyman@perceptron.com
In reply to: Ralph Smith (#1)
Re: A plpgsql unidentifiable problem.

Easy: you've got 3 Ifs without "END IF":

IF uppergt = 'BOD' THEN RETURN 0 ;
IF uppergt = 'MOD' THEN RETURN 86400/2 ;
IF uppergt = 'EOD' THEN RETURN 86399 ;

Igor

-----Original Message-----
From: Ralph Smith [mailto:smithrn@washington.edu]
Sent: Thursday, June 19, 2008 3:19 PM
To: pgsql-general@postgresql.org
Subject: A plpgsql unidentifiable problem.

I'm baffled and have tried various variations but still nogo.

From PgAdmin III I get:
-------------------------------------------
********** Error **********

ERROR: syntax error at or near ";"
SQL state: 42601
Character: 19001

-- referring to the semi-colon after the 'END' statement.

*******************************
When I check this out in PgAdmin III.
-------------------------------------------
CREATE OR REPLACE FUNCTION time_to_utime(given_time varchar) RETURNS INT
AS $$

DECLARE

uppergt varchar ;
colon1 int ;
colon2 int ;
digitsA varchar ;
digitsB varchar ;
digitsC varchar ;
numberA int ;
numberB int ;
numberC int ;
result int ;

BEGIN

IF check_time(given_time) = FALSE THEN
RAISE NOTICE 'The time passed into function time_to_utime is not in
a valid format.' ;
END IF ;

-- ----------------------------------------

uppergt := upper(given_time) ;

IF uppergt = 'BOD' THEN RETURN 0 ;
IF uppergt = 'MOD' THEN RETURN 86400/2 ;
IF uppergt = 'EOD' THEN RETURN 86399 ;

-- ----------------------------------------

colon1:=strpos(invar,':') ;
colon2:=colon1+strpos(substring(invar from colon1+1),':') ;

digitsA := split_part(invar,':',1) ;
numberA := to_number(digitsA,'99') ;

digitsB := split_part(invar,':',2) ;
numberB := to_number(digitsB,'99') ;

digitsC := split_part(invar,':',3) ;
numberC := to_number(digitsC,'99') ;

result := 3600*numberA + 60*numberB + numberC ;

RETURN result ;

END ;
$$ LANGUAGE PLPGSQL ; /* time_to_utime */
********************************************

Any clues?

THANKS!

Ralph Smith