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

#1 Re : PL/pgSQL » RESOLU - erreur de input dans un integer » 04/06/2013 19:03:36

Merci beaucoup!


Ça l'a fonctionné!


C'était donc ma façon de faire qui ne fonctionnait pas! Je suis trop habitué de travailler avec les objet Openerp en python qui font presque tout pour nous!


Par contre je ne suis pas sur de saisir ce que tu veux dire par intégrer le SELECT dans le INSERT...
Est-ce qu'il va faire une insertion massive avec toute les données collecté dans le SELECT?


Ou sinon comment je fait pour faire une boucle sur tout les partenaire répondant aux critères de mon SELECT.


Dans tout les cas mon problème est résolu!
... mais je ne voit pas de bouton résolu dans l'interface...


Merci!

#2 Re : PL/pgSQL » RESOLU - erreur de input dans un integer » 03/06/2013 17:19:47

En effet, res_partner est un objet qui contient les différentes information d'un partnaire, et erpq_city une table simple contenant les champs d'info d'une ville.


Les 2 tables contiennent le champ "state_id" qui est un champs référentiel pointant sur une 3e table res_country_state contenant les infos des états d'un pays.


Je comprend le questionnement sur le contenu des tables, mais je crois que je n'ai utilisé que le contenu d'une requête simple pour faire mon insertion dans erpq_city...


Le SELECT de la boucle for n'a que 2 colonnes et elle sont explicitement utilisé dans le update dont l'ordre est respecté pour l'insertion des valeurs...


Donc en prenant pour acquis que city est un champs texte et que j’essaie de l'insérer dans un autre champs texte
et que state_id est un champs numérique, et que j’essaie aussi de l'insérer dans un champs numérique.


Je ne comprend pas l'erreur, c'est probablement dû à quelque chose que je ne fait pas comme du monde mais j'ignore quoi.


Pour information, je développe sous Openerp toute les table on la structure de base [id, create_user, create_date, write_date, write_user, ...]
et j'ai pris soin de peupler chacun de ces champs lors de mon insertion.


autre info, c'est un script d'initialisation qui ne sera passé qu'une seule fois et sur une table vide.


Merci encore pour votre aide!

#3 PL/pgSQL » RESOLU - erreur de input dans un integer » 31/05/2013 16:23:02

magellus
Réponses : 5

J'ai ce message d'erreur lorsque je tente une fonction de recherche et d'insertion dans ma bd.


ERROR:  invalid input syntax for integer: "Stokesbay"
CONTEXT:  PL/pgSQL function "correctcity" line 7 at FOR over SELECT rows
********** Error **********
ERROR: invalid input syntax for integer: "Stokesbay"
SQL state: 22P02
Context: PL/pgSQL function "correctcity" line 7 at FOR over SELECT rows


Mon problème, c'est que je n'essai pas d'insérer un text dans un integer...
je veux seulement peupler une table avec les infos d'une autre table.


Si je décortique ma requête et que je test chaque partie séparément tout fonctionne,
mais lorsque je la met en fonction j'ai cette erreur.


Quelqu'un peux me dire où je me suis trompé?
Merci d'avance!


Je travaille avec postgresql 9.1 et pgadmin version 1.14


voici ma fonction:

CREATE OR REPLACE FUNCTION correctCity() RETURNS SETOF res_partner AS
$BODY$
DECLARE
    coll res_partner%rowtype;
    myvar integer;
BEGIN
    myvar = 0;
    FOR coll IN SELECT distinct(city) city, state_id FROM res_partner WHERE id > 0 and state_id is not null
    LOOP
        myvar = myvar + 1;
        INSERT INTO erpq_city( id, create_uid, create_date, write_date, write_uid, info, state_id, name)
        VALUES (myvar, 1, now(), now(), 1,'' , coll.state_id, coll.city);
    END LOOP;
    RETURN;
END
$BODY$
LANGUAGE 'plpgsql' ;

SELECT * FROM correctCity();

Pied de page des forums

Propulsé par FluxBB