PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 17/11/2015 15:43:36

Papychampi
Membre

[ERREUR] - Problème lors de la création d'une fonction

Bonjour,

Je créé une fonction depuis pgadmin 3 et lorsque je veux la submit il me dit qu'il y a un problème... Du coup je vous donne le code...

DECLARE
	i 		integer;
	j 		integer;
	_sorderid 	integer;
	_sdeliveryid 	integer;
	_ret 		boolean;
	_save		integer;
	_sn		text;
BEGIN
	INSERT INTO supplierorders (orderform, startdate, quantity, supplier) VALUES (_orderform, _stardate, _total, _supplier) RETURNING "sorderid" INTO STRICT _sorderid;
	FOR j IN 1 .. _cadences LOOP
		INSERT INTO supplierdeliveries (sorderid, ptypeid, batch, quantity) VALUES (_sorderid, _ptypeid[j]::integer, _batch[j]::integer, _quantity[j]::integer) RETURNING "sdeliveryid" INTO STRICT _sdeliveryid;
		_sn := _sn1[j] || _sn2[j];
		SELECT check_sn(_sn) into _ret;
		IF _ret = false
		THEN
			RETURN FALSE;
		END IF;
		FOR i IN 1 .. _quantity[j] LOOP

			/* Conquaténation */
			_sn := _sn1[j] || _sn2[j];

			/* Insertion */
			INSERT INTO product (sdeliveryid, ptypeid, sn, status, date) VALUES (_sdeliveryid, _ptypeid[j]::integer, _sn::text, 'Commandées', _date);

			/* Ajout de la valeur Hexa */
			SELECT hex_to_int(_sn2[j]) INTO _save;
			_save = _save + 1;
			SELECT int_to_hex(_save) INTO _sn2[j];
		END LOOP;
	END LOOP;
	RETURN TRUE;
END;

Et le message d'erreur

Une erreur s'est produite:

ERREUR: erreur de syntaxe sur ou près de "["
LINE 31: SELECT int_to_hex(_save) INTO _sn2[j];
                                    ^

Si vous pouviez éclairer ma petite lanterne...

Hors ligne

#2 17/11/2015 15:52:50

Marc Cousin
Membre

Re : [ERREUR] - Problème lors de la création d'une fonction

_sn2[j]:=int_to_hex(_save)

ne suffirait pas ?


Marc.

Hors ligne

#3 17/11/2015 20:42:53

edlm
Membre

Re : [ERREUR] - Problème lors de la création d'une fonction

En complément de la réponse de Marc qui semble judicieuse, l'erreur de syntaxe rapportée est normale puisque la documentation  précise:

Le résultat d'une commande SQL ne ramenant qu'une seule ligne (mais avec une ou plusieurs colonnes) peut être affecté à une variable de type record, row ou à une liste de variables scalaires

scalaires... les variables de type tableau sont donc exclues.


Éric

Hors ligne

#4 18/11/2015 11:47:02

Papychampi
Membre

Re : [ERREUR] - Problème lors de la création d'une fonction

Hmmm....

C'est très intéressant ce que vous me dites là! Bon du coup c'est bon ça marche... Cependant j'ai remarqué un petit bug chez moi, enfin, pas un bug mais un effet non désirer... La partie Hex doit être codé sur 4 chars quoi qu'il arrive... Mais du coup quand je suis au tout début bah je me retrouve avec des chaines de 1 voir 2 chars ce qui ne doit pas arriver...

Comment faire en sorte qu'il y ai bien 4 chars a chaque fois pour mes nombres hex genre "0001"

En tous cas merci de m'aider

Cordialement,

Hors ligne

#5 18/11/2015 18:43:51

Marc Cousin
Membre

Re : [ERREUR] - Problème lors de la création d'une fonction

Si vous voulez être sûr d'avoir un format bien précis pour la conversion d'un int en texte, utilisez la fonction to_char:

select to_char(12,'0000');
 to_char 
---------
  0012

en espérant que c'est bien ce que vous cherchez… je n'ai pas regardé le détail de ce que vous souhaitez faire.


Marc.

Hors ligne

Pied de page des forums