Rechnen mit bigint in Funktion

Hallo zusammen,

ich bin MySQL-Umsteiger und habe nun das Vergnügen einige Stored Functions nach plpgsql umzuschreiben. Ging soweit ganz gut, aber mir macht eine bigint-Variable Ärger. Konkret sieht es (auf Nötigste zusammengeschrieben) so aus:

CREATE OR REPLACE FUNCTION ConvertVersion("Version" character varying)  RETURNS bigint AS
$BODY$
DECLARE e1 bigint; e2 bigint; e3 bigint; e4 bigint;
DECLARE res bigint;
DECLARE DelimiterCount INT;
DECLARE lVersion character varying;
BEGIN


	-- hier mal aufs nötigste runtergebrochen
	-- Der eigentliche Inhalt von e1 - e4
	-- wird per SQL ermittelt
	e1 := 1;
	e2 := 2;
	e3 := 3;
	e4 := 4;


	-- hier knallt es
	res := e1*(10000 * 10000 * 10000) + e2*(10000 * 10000) + e3 * 10000 + e4;


	RETURN res;


END;
$BODY$
  LANGUAGE plpgsql IMMUTABLE
  COST 100;

Das Ganze fliegt mir aber mit folgende Meldung um die Ohren:

FEHLER:  integer ist außerhalb des gültigen Bereichs
CONTEXT:  SQL-Anweisung »SELECT e1*(10000 * 10000 * 10000)«

Was mich daran irritiert ist, dass eigentlich nirgendwo mehr ein integer vorhanden ist und die Ergebniszahl doch in einen bigint passen müsste. Was habe ich übersehen, damit die Rechnung funktioniert?

Herzlich Willkommen :wink:

Das Ganze fliegt mir aber mit folgende Meldung um die Ohren:

FEHLER: integer ist außerhalb des gültigen Bereichs
CONTEXT: SQL-Anweisung »SELECT e1*(10000 * 10000 * 10000)«

>
> Was mich daran irritiert ist, dass eigentlich nirgendwo mehr ein integer vorhanden ist und die Ergebniszahl doch in einen bigint passen müsste. Was habe ich übersehen, damit die Rechnung funktioniert?

Deine Konstanten da sind INT. Ja, wirklich schön finde ich das am Beispiel jetzt auch nicht, egal:

```text
test=*# select 10000 * 10000 * 10000;
ERROR:  integer out of range
Time: 0,128 ms
test=*# select 10000 * 10000 * 10000::bigint;
   ?column?
---------------
 1000000000000
(1 row)

Andreas