Vous n'êtes pas identifié(e).
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
_sn2[j]:=int_to_hex(_save)
ne suffirait pas ?
Marc.
Hors ligne
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
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
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