Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mettre résultat d'une requête dan un fichier texte

Sujet résolu
    20 février 2020 à 21:19:38

    Ma procédure passe, mais a cet essai d'insertion j'ai cette erreur

    db_test-abitabio=> CALL insertion_product_from_xml (nextval('product_template_id_seq'::regclass),'Marteau',1,'product',FALSE,2.20.2.9,1.13,0,0.00,TRUE,TRUE,'UNITE','UNITE',2,TRUE,'6drtl9',2,NOW(),2,NOW(),'manual','no-message','no','order',2,0,'none','receive','no-message');

    ERROR:  syntax error at or near ".2"

    LINE 1: ...d_seq'::regclass),'Marteau',1,'product',FALSE,2.20.2.9,1.13,...

                                                                 ^

    -
    Edité par VictorLcmt 20 février 2020 à 21:21:21

    • Partager sur Facebook
    • Partager sur Twitter
      20 février 2020 à 22:58:45

      2.20.2.9 est une chaîne de caractères, pas un nombre. Il faut donc l'encadrer ...

      Encore une belle preuve de recherche et de réflexion...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        21 février 2020 à 9:42:13

        Oui c'est vrai mais la j'ai une autre erreur que je ne comprend pas nom plus je te met tout ci-dessous :

        Procédure qui passe :

        CREATE OR REPLACE PROCEDURE insertion_product_from_xml (
            p_id integer,
            p_name character varying,
            p_sequence integer,
            p_type character varying,
            p_rental boolean,
            p_categ_id integer,
            p_list_price numeric,
            p_volume double precision,
            p_weight numeric,
            p_sale_ok boolean,
            p_purchase_ok boolean,
            p_uom_id integer,
            p_uom_po_id integer,
            p_company_id integer,
            p_active boolean,
            p_default_code character varying,
            p_create_uid integer,
            p_create_date timestamp without time zone,
            p_write_uid integer,
            p_write_date timestamp without time zone,
            p_service_type character varying,
            p_sale_line_warn character varying,
            p_expense_policy character varying,
            p_invoice_policy character varying,
            p_responsible_id integer,
            p_sale_delay double precision,
            p_tracking character varying,
            p_purchase_method character varying,
            p_purchase_line_warn character varying
        )
        LANGUAGE PLPGSQL
        AS $$
        DECLARE
            v_unit_id INTEGER;
            v_categ_id INTEGER;
        BEGIN
            -- Recherche si unité existe
            SELECT INTO v_unit_id id
            FROM uom_uom
            WHERE name = p_uom_id;
          
            -- si existe pas
            IF v_unit_id IS NULL THEN
                -- on crée une nouvelle unité
                INSERT INTO "public"."uom_uom" ( "id","name","category_id","factor","rounding","active","uom_type","measure_type","create_uid","create_date","write_uid","write_date" )
                VALUES ( nextval('uom_uom_id_seq'), p_name,1,1,0.01,TRUE,'reference','unit',1,NOW(),1,NOW() );
                -- et on récupère son id
                v_unit_id := currval( 'uom_uom_id_seq' );
            END IF;
          
            -- Recherche si catégorie existe
            SELECT INTO v_categ_id id
            FROM product_category
            WHERE name = p_categ_id;
          
            -- si existe pas
            IF v_categ_id IS NULL THEN
                -- on crée une nouvelle catégorie
                INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                VALUES ( nextval('product_category_id_seq'),p_patent_path,'Libelle à définir','Libelle à définir',40,NOW(),40,NOW());
                -- et on récupère son id
                v_categ_id := currval( 'product_category_id_seq' );
            END IF;
          
            INSERT INTO "public"."product_template" ( "id","name","sequence","type","rental","categ_id","list_price","volume","weight","sale_ok","purchase_ok","uom_id","uom_po_id","company_id","active","default_code","create_uid","create_date","write_uid","write_date","service_type","sale_line_warn","expense_policy","invoice_policy","responsible_id","sale_delay","tracking","purchase_method","purchase_line_warn")
            VALUES (nextval('product_template_id_seq'), p_id, p_name, p_sequence, p_type, p_rental, v_categ_id, p_list_price, p_volume, p_weight, p_sale_ok, p_purchase_ok, v_unit_id, v_unit_id, p_company_id, p_active, p_default_code, p_create_uid, p_create_date, p_write_uid, p_write_date, p_service_type, p_sale_line_warn, p_expense_policy, p_invoice_policy, p_responsible_id, p_sale_delay, p_tracking, p_purchase_method, p_purchase_line_warn);
        END;
        $$;
        
        
        

        Et quand je met ma requêt pour appeler la procedure est celle-ci : 

        CALL insertion_product_from_xml (nextval('product_template_id_seq'::regclass),'Marteau',1,'product',FALSE,'2.20.2.9',1.13,0,0.00,TRUE,TRUE,'UNITE','UNITE',2,TRUE,'6rt39l',2,NOW(),2,NOW(),'manual','no-message','no','order',2,0,'none','receive','no-message');
        


        Et quand j’exécute cette ligne j'ai cette erreur

        db_test-abitabio=> CALL insertion_product_from_xml (nextval('product_template_id_seq'::regclass),'Marteau',1,'product',FALSE,'2.20.2.9',1.13,0,0.00,TRUE,TRUE,'UNITE','UNITE',2,TRUE,'6rt39l',2,NOW(),2,NOW(),'manual','no-message','no','order',2,0,'none','receive','no-message');

        ERREUR:  la procédure insertion_product_from_xml(bigint, unknown, integer, unknown, boolean, unknown, numeric, integer, numeric, boolean, boolean, unknown, unknown, integer, boolean, unknown, integer, timestamp with time zone, integer, timestamp with time zone, unknown, unknown, unknown, unknown, integer, integer, unknown, unknown, unknown) n'existe pas

        LIGNE 1 : CALL insertion_product_from_xml (nextval('product_template_i...

                       ^

        ASTUCE : Aucune procédure ne correspond au nom donné et aux types d'arguments.

        Vous pourriez avoir besoin d'ajouter des conversions de type explicites.

        • Partager sur Facebook
        • Partager sur Twitter
          21 février 2020 à 10:20:13

          VictorLcmt a écrit:

          j'ai une autre erreur que je ne comprend pas nom plus

          VictorLcmt a écrit:

          Aucune procédure ne correspond au nom donné et aux types d'arguments.

          L'erreur t'indique un problème de type de données.

          Par exemple, p_categ_id est défini comme integer dans la procédure mais tu passes un varchar ...

          Il te faut vérifier paramètre par paramètre que les types correspondent ... faut-il le faire à ta place ?

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            21 février 2020 à 10:44:40

            Même en changeant ce que je pense :

            CREATE OR REPLACE PROCEDURE insertion_product_from_xml (
                p_id integer,
                p_name character varying,
                p_sequence integer,
                p_type character varying,
                p_rental boolean,
                p_categ_id character varying,
                p_list_price numeric,
                p_volume double precision,
                p_weight numeric,
                p_sale_ok boolean,
                p_purchase_ok boolean,
                p_uom_id character varying,
                p_uom_po_id character varying,
                p_company_id integer,
                p_active boolean,
                p_default_code character varying,
                p_create_uid integer,
                p_create_date timestamp without time zone,
                p_write_uid integer,
                p_write_date timestamp without time zone,
                p_service_type character varying,
                p_sale_line_warn character varying,
                p_expense_policy character varying,
                p_invoice_policy character varying,
                p_responsible_id integer,
                p_sale_delay double precision,
                p_tracking character varying,
                p_purchase_method character varying,
                p_purchase_line_warn character varying
            )
            LANGUAGE PLPGSQL
            AS $$
            DECLARE
                v_unit_id INTEGER;
                v_categ_id INTEGER;
            BEGIN
                -- Recherche si unité existe
                SELECT INTO v_unit_id id
                FROM uom_uom
                WHERE name = p_uom_id;
              
                -- si existe pas
                IF v_unit_id IS NULL THEN
                    -- on crée une nouvelle unité
                    INSERT INTO "public"."uom_uom" ( "id","name","category_id","factor","rounding","active","uom_type","measure_type","create_uid","create_date","write_uid","write_date" )
                    VALUES ( nextval('uom_uom_id_seq'), p_name,1,1,0.01,TRUE,'reference','unit',1,NOW(),1,NOW() );
                    -- et on récupère son id
                    v_unit_id := currval( 'uom_uom_id_seq' );
                END IF;
              
                -- Recherche si catégorie existe
                SELECT INTO v_categ_id id
                FROM product_category
                WHERE name = p_categ_id;
              
                -- si existe pas
                IF v_categ_id IS NULL THEN
                    -- on crée une nouvelle catégorie
                    INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                    VALUES ( nextval('product_category_id_seq'),p_patent_path,'Libelle à définir','Libelle à définir',40,NOW(),40,NOW());
                    -- et on récupère son id
                    v_categ_id := currval( 'product_category_id_seq' );
                END IF;
              
                INSERT INTO "public"."product_template" ( "id","name","sequence","type","rental","categ_id","list_price","volume","weight","sale_ok","purchase_ok","uom_id","uom_po_id","company_id","active","default_code","create_uid","create_date","write_uid","write_date","service_type","sale_line_warn","expense_policy","invoice_policy","responsible_id","sale_delay","tracking","purchase_method","purchase_line_warn")
                VALUES (nextval('product_template_id_seq'), p_id, p_name, p_sequence, p_type, p_rental, v_categ_id, p_list_price, p_volume, p_weight, p_sale_ok, p_purchase_ok, v_unit_id, v_unit_id, p_company_id, p_active, p_default_code, p_create_uid, p_create_date, p_write_uid, p_write_date, p_service_type, p_sale_line_warn, p_expense_policy, p_invoice_policy, p_responsible_id, p_sale_delay, p_tracking, p_purchase_method, p_purchase_line_warn);
            END;
            $$;
            
            
            
            
            

            En appelant la procédure :

             CALL insertion_product_from_xml (nextval('product_template_id_seq'::regclass),'Marteau',1,'product',FALSE,'2.20.2.9',1.13,0,0.00,TRUE,TRUE,'UNITE','UNITE',2,TRUE,'6rt39l',2,NOW(),2,NOW(),'manual','no-message','no','order',2,0,'none','receive','no-message');
            

            J'ai la même erreur :

            db_test-abitabio=> CALL insertion_product_from_xml (nextval('product_template_id_seq'::regclass),'Marteau',1,'product',FALSE,'2.20.2.9',1.13,0,0.00,TRUE,TRUE,'UNITE','UNITE',2,TRUE,'6rt39l',2,NOW(),2,NOW(),'manual','no-message','no','order',2,0,'none','receive','no-message');

            ERREUR:  la procédure insertion_product_from_xml(bigint, unknown, integer, unknown, boolean, unknown, numeric, integer, numeric, boolean, boolean, unknown, unknown, integer, boolean, unknown, integer, timestamp with time zone, integer, timestamp with time zone, unknown, unknown, unknown, unknown, integer, integer, unknown, unknown, unknown) n'existe pas

            LIGNE 1 : CALL insertion_product_from_xml (nextval('product_template_i...

                           ^

            ASTUCE : Aucune procédure ne correspond au nom donné et aux types d'arguments.

            Vous pourriez avoir besoin d'ajouter des conversions de type explicites.

            • Partager sur Facebook
            • Partager sur Twitter
              21 février 2020 à 12:10:15

              Au passage, ton maître de stage te sert à quoi au juste ?

              -
              Edité par Benzouye 21 février 2020 à 12:13:39

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                21 février 2020 à 12:24:00

                Il est pas aujourd'hui, et il ne connait pas les procédure, trigger, c'est pour cela que j'essaie de me débrouiller par moi même sauf qu"e quand je bloque réellement je demande a des forums et en l’occurrence ce forum et celui la 

                Est ce que vous pouvez m'expliquer mon erreur et me la corriger s'il vous plait 

                • Partager sur Facebook
                • Partager sur Twitter
                  21 février 2020 à 12:36:38

                  Tu peux commencer par retirer tous les paramètres dont tu n'as pas besoin, notamment l'id et les timestamp, un paramètre ne peut pas être une fonction en soit ...

                  Regarde, tu passes dans p_id le nextval, et en plus tu le remets dans l'insert à la fin ... je pense également aux deux NOW() ...

                  Le CALL serait donc :

                  CALL insertion_product_from_xml ('Marteau',1,'product',FALSE,'2.20.2.9',1.13,0,0.00,TRUE,TRUE,'UNITE','UNITE',2,TRUE,'6rt39l',2,2,'manual','no-message','no','order',2,0,'none','receive','no-message');

                  La procédure serait donc :

                  CREATE OR REPLACE PROCEDURE insertion_product_from_xml (
                  	p_name character varying,
                  	p_sequence integer,
                  	p_type character varying,
                  	p_rental boolean,
                  	p_categ_id character varying,
                  	p_list_price numeric,
                  	p_volume double precision,
                  	p_weight numeric,
                  	p_sale_ok boolean,
                  	p_purchase_ok boolean,
                  	p_uom_id character varying,
                  	p_uom_po_id character varying,
                  	p_company_id integer,
                  	p_active boolean,
                  	p_default_code character varying,
                  	p_create_uid integer,
                  	p_write_uid integer,
                  	p_service_type character varying,
                  	p_sale_line_warn character varying,
                  	p_expense_policy character varying,
                  	p_invoice_policy character varying,
                  	p_responsible_id integer,
                  	p_sale_delay double precision,
                  	p_tracking character varying,
                  	p_purchase_method character varying,
                  	p_purchase_line_warn character varying
                  )
                  LANGUAGE PLPGSQL
                  AS $$
                  DECLARE
                  	v_unit_id INTEGER;
                  	v_categ_id INTEGER;
                  BEGIN
                  	-- Recherche si unité existe
                  	SELECT INTO v_unit_id id
                  	FROM uom_uom
                  	WHERE name = p_uom_id;
                     
                  	-- si existe pas
                  	IF v_unit_id IS NULL THEN
                  		-- on crée une nouvelle unité
                  		INSERT INTO "public"."uom_uom" ( "id","name","category_id","factor","rounding","active","uom_type","measure_type","create_uid","create_date","write_uid","write_date" )
                  		VALUES ( nextval('uom_uom_id_seq'), p_name,1,1,0.01,TRUE,'reference','unit',1,NOW(),1,NOW() );
                  		-- et on récupère son id
                  		v_unit_id := currval( 'uom_uom_id_seq' );
                  	END IF;
                     
                  	-- Recherche si catégorie existe
                  	SELECT INTO v_categ_id id
                  	FROM product_category
                  	WHERE name = p_categ_id;
                     
                  	-- si existe pas
                  	IF v_categ_id IS NULL THEN
                  		-- on crée une nouvelle catégorie
                  		INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                  		VALUES ( nextval('product_category_id_seq'),p_patent_path,'Libelle à définir','Libelle à définir',40,NOW(),40,NOW());
                  		-- et on récupère son id
                  		v_categ_id := currval( 'product_category_id_seq' );
                  	END IF;
                     
                  	INSERT INTO "public"."product_template" ( "id","name","sequence","type","rental","categ_id","list_price","volume","weight","sale_ok","purchase_ok","uom_id","uom_po_id","company_id","active","default_code","create_uid","create_date","write_uid","write_date","service_type","sale_line_warn","expense_policy","invoice_policy","responsible_id","sale_delay","tracking","purchase_method","purchase_line_warn")
                  	VALUES (nextval('product_template_id_seq'), p_name, p_sequence, p_type, p_rental, v_categ_id, p_list_price, p_volume, p_weight, p_sale_ok, p_purchase_ok, v_unit_id, v_unit_id, p_company_id, p_active, p_default_code, p_create_uid, NOW(), p_write_uid, NOW(), p_service_type, p_sale_line_warn, p_expense_policy, p_invoice_policy, p_responsible_id, p_sale_delay, p_tracking, p_purchase_method, p_purchase_line_warn);
                  END;
                  $$;
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    21 février 2020 à 13:21:30

                    Ok d'accord, est ce que vous penser que cette erreur

                    CREATE PROCEDURE
                    psql:/home/lifenum/lifenum/trigger_ir_attachment.sh:68: ERREUR:  la colonne « p_patent_path » n'existe pas
                    LIGNE 2 : ...      VALUES ( nextval('product_category_id_seq'),p_patent_p...
                                                                                   ^
                    ASTUCE : Peut-être que vous souhaitiez référencer la colonne « product_category.parent_path ».
                    REQUÊTE : INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                            VALUES ( nextval('product_category_id_seq'),p_patent_path,'Libelle à définir','Libelle à définir',40,NOW(),40,NOW())
                    CONTEXTE : fonction PL/pgsql insertion_product_from_xml(character varying,integer,character varying,boolean,character varying,numeric,double precision,numeric,boolean,boolean,character varying,character varying,integer,boolean,character varying,integer,integer,character varying,character varying,character varying,character varying,integer,double precision,character varying,character varying,character varying), ligne 28 à instruction SQL
                    psql:/home/lifenum/lifenum/trigger_ir_attachment.sh:70: NOTICE:  La procédure insertion_product_from_xml() n'existe pas, poursuite du traitement
                    DROP PROCEDURE
                    

                    Donc je l'ai corrigé comme cela :

                    CREATE OR REPLACE PROCEDURE insertion_product_from_xml (
                        p_name character varying,
                        p_sequence integer,
                        p_type character varying,
                        p_rental boolean,
                        p_categ_id character varying,
                        p_list_price numeric,
                        p_volume double precision,
                        p_weight numeric,
                        p_sale_ok boolean,
                        p_purchase_ok boolean,
                        p_uom_id character varying,
                        p_uom_po_id character varying,
                        p_company_id integer,
                        p_active boolean,
                        p_default_code character varying,
                        p_create_uid integer,
                        p_write_uid integer,
                        p_service_type character varying,
                        p_sale_line_warn character varying,
                        p_expense_policy character varying,
                        p_invoice_policy character varying,
                        p_responsible_id integer,
                        p_sale_delay double precision,
                        p_tracking character varying,
                        p_purchase_method character varying,
                        p_purchase_line_warn character varying
                    )
                    LANGUAGE PLPGSQL
                    AS $$
                    DECLARE
                        v_unit_id INTEGER;
                        v_categ_id INTEGER;
                    BEGIN
                        -- Recherche si unité existe
                        SELECT INTO v_unit_id id
                        FROM uom_uom
                        WHERE name = p_uom_id;
                        
                        -- si existe pas
                        IF v_unit_id IS NULL THEN
                            -- on crée une nouvelle unité
                            INSERT INTO "public"."uom_uom" ( "id","name","category_id","factor","rounding","active","uom_type","measure_type","create_uid","create_date","write_uid","write_date" )
                            VALUES ( nextval('uom_uom_id_seq'), uom_uom.name,1,1,0.01,TRUE,'reference','unit',1,NOW(),1,NOW() );
                            -- et on récupère son id
                            v_unit_id := currval( 'uom_uom_id_seq' );
                        END IF;
                        
                        -- Recherche si catégorie existe
                        SELECT INTO v_categ_id id
                        FROM product_category
                        WHERE name = p_categ_id;
                        
                        -- si existe pas
                        IF v_categ_id IS NULL THEN
                            -- on crée une nouvelle catégorie
                            INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                            VALUES ( nextval('product_category_id_seq'),product_category.patent_path,'Libelle à définir','Libelle à définir',40,NOW(),40,NOW());
                            -- et on récupère son id
                            v_categ_id := currval( 'product_category_id_seq' );
                        END IF;
                        
                        INSERT INTO "public"."product_template" ( "id","name","sequence","type","rental","categ_id","list_price","volume","weight","sale_ok","purchase_ok","uom_id","uom_po_id","company_id","active","default_code","create_uid","create_date","write_uid","write_date","service_type","sale_line_warn","expense_policy","invoice_policy","responsible_id","sale_delay","tracking","purchase_method","purchase_line_warn")
                        VALUES (nextval('product_template_id_seq'), p_name, p_sequence, p_type, p_rental, v_categ_id, p_list_price, p_volume, p_weight, p_sale_ok, p_purchase_ok, v_unit_id, v_unit_id, p_company_id, p_active, p_default_code, p_create_uid, NOW(), p_write_uid, NOW(), p_service_type, p_sale_line_warn, p_expense_policy, p_invoice_policy, p_responsible_id, p_sale_delay, p_tracking, p_purchase_method, p_purchase_line_warn);
                    END;
                    $$;

                    Mais du cpoup j'ai cette erreur :

                    ERREUR:  référence invalide d'une entrée de la clause FROM pour la table « product_category »
                    LIGNE 2 : ...      VALUES ( nextval('product_category_id_seq'),product_ca...
                                                                                   ^
                    ASTUCE : Il existe une entrée pour la table « product_category » mais elle ne peut pas être
                    référencée de cette partie de la requête.
                    REQUÊTE : INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                            VALUES ( nextval('product_category_id_seq'),product_category.patent_path,'Libelle à définir','Libelle à définir',40,NOW(),40,NOW())
                    CONTEXTE : fonction PL/pgsql insertion_product_from_xml(character varying,integer,character varying,boolean,character varying,numeric,double precision,numeric,boolean,boolean,character varying,character varying,integer,boolean,character varying,integer,integer,character varying,character varying,character varying,character varying,integer,double precision,character varying,character varying,character varying), ligne 28 à instruction SQL
                    

                    Et je ne vois pas comment faire 


                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 février 2020 à 13:41:48

                      Ligne 57 et 58 tu insères la nouvelle catégorie dans la table product_category (si la catégorie n'existe pas déjà).

                      Cette table a une colonne parent_path. Que doit contenir cette colonne ?

                      Dans la clause VALUES tu passes comme valeur pour cette colonne la variable p_patent_path ... Cette variable n'existe nulle part ... ni dans les paramètres de la procédure, ni ailleurs ... Que veux-tu mettre (que dois-tu mettre) comme valeur pour cette colonne parent_path ?

                      As-tu un exemple de catégorie déjà existante ? Que contient parent_path pour cette catégorie ?

                      Au pire tu peux essayer de mettre NULL ...

                      -
                      Edité par Benzouye 21 février 2020 à 13:42:31

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                        21 février 2020 à 14:23:52

                        Elle doit contenir un varchar

                        Un exemple :

                        Voila a quoi ressemble l'insertion dans product_category

                        On ne peut pas mettre ce champ a null car il est configurer à NOT NULL

                        Et voici a quoi ressemble l'insertion dans la table es unités uom_uom :

                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 février 2020 à 16:48:46

                          Il semblerait donc que parent_path soit ce que tu récupères dans p_categ_id du coup ...

                          Donc simplement le mettre à la ligne 58 :

                          CREATE OR REPLACE PROCEDURE insertion_product_from_xml (
                              p_name character varying,
                              p_sequence integer,
                              p_type character varying,
                              p_rental boolean,
                              p_categ_id character varying,
                              p_list_price numeric,
                              p_volume double precision,
                              p_weight numeric,
                              p_sale_ok boolean,
                              p_purchase_ok boolean,
                              p_uom_id character varying,
                              p_uom_po_id character varying,
                              p_company_id integer,
                              p_active boolean,
                              p_default_code character varying,
                              p_create_uid integer,
                              p_write_uid integer,
                              p_service_type character varying,
                              p_sale_line_warn character varying,
                              p_expense_policy character varying,
                              p_invoice_policy character varying,
                              p_responsible_id integer,
                              p_sale_delay double precision,
                              p_tracking character varying,
                              p_purchase_method character varying,
                              p_purchase_line_warn character varying
                          )
                          LANGUAGE PLPGSQL
                          AS $$
                          DECLARE
                              v_unit_id INTEGER;
                              v_categ_id INTEGER;
                          BEGIN
                              -- Recherche si unité existe
                              SELECT INTO v_unit_id id
                              FROM uom_uom
                              WHERE name = p_uom_id;
                               
                              -- si existe pas
                              IF v_unit_id IS NULL THEN
                                  -- on crée une nouvelle unité
                                  INSERT INTO "public"."uom_uom" ( "id","name","category_id","factor","rounding","active","uom_type","measure_type","create_uid","create_date","write_uid","write_date" )
                                  VALUES ( nextval('uom_uom_id_seq'), uom_uom.name,1,1,0.01,TRUE,'reference','unit',1,NOW(),1,NOW() );
                                  -- et on récupère son id
                                  v_unit_id := currval( 'uom_uom_id_seq' );
                              END IF;
                               
                              -- Recherche si catégorie existe
                              SELECT INTO v_categ_id id
                              FROM product_category
                              WHERE name = p_categ_id;
                               
                              -- si existe pas
                              IF v_categ_id IS NULL THEN
                                  -- on crée une nouvelle catégorie
                                  INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                                  VALUES ( nextval('product_category_id_seq'),p_categ_id,'Libelle à définir','Libelle à définir',40,NOW(),40,NOW());
                                  -- et on récupère son id
                                  v_categ_id := currval( 'product_category_id_seq' );
                              END IF;
                               
                              INSERT INTO "public"."product_template" ( "id","name","sequence","type","rental","categ_id","list_price","volume","weight","sale_ok","purchase_ok","uom_id","uom_po_id","company_id","active","default_code","create_uid","create_date","write_uid","write_date","service_type","sale_line_warn","expense_policy","invoice_policy","responsible_id","sale_delay","tracking","purchase_method","purchase_line_warn")
                              VALUES (nextval('product_template_id_seq'), p_name, p_sequence, p_type, p_rental, v_categ_id, p_list_price, p_volume, p_weight, p_sale_ok, p_purchase_ok, v_unit_id, v_unit_id, p_company_id, p_active, p_default_code, p_create_uid, NOW(), p_write_uid, NOW(), p_service_type, p_sale_line_warn, p_expense_policy, p_invoice_policy, p_responsible_id, p_sale_delay, p_tracking, p_purchase_method, p_purchase_line_warn);
                          END;
                          $$;
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                            22 février 2020 à 10:14:56

                            Très bien merci beaucoup ca fonctionne hyper bien, je sui très content,  désolé de ne pas avoir fais plutôt la procedure, car j'étais omnibulée pour faire un trigger, mais j'aurais du vous écouter et on aurait résolu le problème beaucoup plus tot 

                            Encore merci et désolé de mon comportment 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 février 2020 à 10:47:43

                              Bonne continuation. 

                              Il faut vraiment que tu t'exerces à rechercher dans les documentation, et que tu reprennes un cours SQL en profondeur, si tu dois continuer dans cette voie...

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                22 février 2020 à 11:19:30

                                Merci,très bien je prends e note ton consiel
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 février 2020 à 20:48:43

                                  Bonjour excuser moi de vous déranger mais quand j'execute cette procedure :

                                  CREATE OR REPLACE PROCEDURE insertion_product_from_xml (
                                      p_name character varying,
                                      p_sequence integer,
                                      p_type character varying,
                                      p_rental boolean,
                                      p_categ_id character varying,
                                      p_list_price numeric,
                                      p_volume double precision,
                                      p_weight numeric,
                                      p_sale_ok boolean,
                                      p_purchase_ok boolean,
                                      p_uom_id character varying,
                                      p_uom_po_id character varying,
                                      p_company_id integer,
                                      p_active boolean,
                                      p_default_code character varying,
                                      p_create_uid integer,
                                      p_write_uid integer,
                                      p_service_type character varying,
                                      p_sale_line_warn character varying,
                                      p_expense_policy character varying,
                                      p_invoice_policy character varying,
                                      p_responsible_id integer,
                                      p_sale_delay double precision,
                                      p_tracking character varying,
                                      p_purchase_method character varying,
                                      p_purchase_line_warn character varying
                                  )
                                  LANGUAGE PLPGSQL
                                  AS $$
                                  DECLARE
                                   v_unit_id INTEGER;
                                      v_categ_id INTEGER;
                                  BEGIN
                                      -- Recherche si unité existe
                                      SELECT INTO v_unit_id id
                                      FROM uom_uom
                                      WHERE name = p_uom_id;
                                      
                                      -- si existe pas
                                      IF v_unit_id IS NULL THEN
                                          -- on crée une nouvelle unité
                                          INSERT INTO "public"."uom_uom" ( "id","name","category_id","factor","rounding","active","uom_type","measure_type","create_uid","create_date","write_uid","write_date" )
                                          VALUES ( nextval('uom_uom_id_seq'), p_name,1,1,0.01,TRUE,'reference','unit',1,NOW(),1,NOW() );
                                          -- et on récupère son id
                                          v_unit_id := currval( 'uom_uom_id_seq' );
                                      END IF;
                                      
                                      -- Recherche si catégorie existe
                                      SELECT INTO v_categ_id id
                                      FROM product_category
                                      WHERE name = p_categ_id;
                                      
                                      -- si existe pas
                                      IF v_categ_id IS NULL THEN
                                          -- on crée une nouvelle catégorie
                                          INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                                          VALUES ( nextval('product_category_id_seq'),p_categ_id,'Libelle à définir','Libelle à définir',2,NOW(),2,NOW());
                                          -- et on récupère son id
                                          v_categ_id := currval( 'product_category_id_seq' );
                                      END IF;
                                      
                                      INSERT INTO "public"."product_template" ( "id","name","sequence","type","rental","categ_id","list_price","volume","weight","sale_ok","purchase_ok","uom_id","uom_po_id","company_id","active","default_code","create_uid","create_date","write_uid","write_date","service_type","sale_line_warn","expense_policy","invoice_policy","responsible_id","sale_delay","tracking","purchase_method","purchase_line_warn")
                                      VALUES (nextval('product_template_id_seq'), p_name, p_sequence, p_type, p_rental, v_categ_id, p_list_price, p_volume, p_weight, p_sale_ok, p_purchase_ok, v_unit_id, v_unit_id, p_company_id, p_active, p_default_code, p_create_uid, NOW(), p_write_uid, NOW(), p_service_type, p_sale_line_warn, p_expense_policy, p_invoice_policy, p_responsible_id, p_sale_delay, p_tracking, p_purchase_method, p_purchase_line_warn);
                                   
                                  
                                  INSERT INTO product_product ("default_code","active","product_tmpl_id","volume","weight","create_uid","create_date","write_uid","write_date")
                                  VALUES (p_default_code,p_active,currval( 'product_template_id_seq' ),p_volume,p_weight,p_create_uid, NOW(), p_write_uid, NOW());
                                  
                                  INSERT INTO ir_attachment (name,res_name,res_model,res_model_name,res_field,res_id,company_id,type,store_fname,file_size,checksum,mimetype,index_content,active,create_uid,create_date,write_uid,write_date) VALUES ('image_medium','[p_default_code ] p_name','product.template','Modèle d''article','image_medium',currval( 'product_template_id_seq' ),1,'binary','87/87a18769527837c4ace79b3337636eb1f61d85f9',12109,'7a18769527837c4ace79b3337636eb1f61d85
                                  f9','image/png','image',TRUE,1,NOW(),1,NOW());
                                  
                                  INSERT INTO ir_attachment (name,res_name,res_model,res_model_name,res_field,res_id,company_id,type,store_fname,file_size,checksum,mimetype,index_content,active,create_uid,create_date,write_uid,write_date) VALUES('image_small','[p_default_code ] p_name','product.template','Modèle d''article','image_small',currval( 'product_template_id_seq' ),1,'binary','e7/e7306de1a6766d3ca6c698db595edd7f099497f9',3545,'e7306de1a6766d3ca6c698db595edd7f099497f9'
                                  ,'image/png','image',TRUE,1,NOW(),1,NOW());
                                  
                                  INSERT INTO ir_attachment (name,res_name,res_model,res_model_name,res_field,res_id,company_id,type,store_fname,file_size,checksum,mimetype,index_content,active,create_uid,create_date,write_uid,write_date) VALUES('image','[p_default_code ] p_name','product.template','Modèle d''article','image',currval( 'product_template_id_seq' ),1,'binary','6b/6bec80842f1621b05f3f64c766151f359c978bcd',204268,'6bec80842f1621b05f3f64c766151f359c978bcd','image/png','image',TRUE,1,NOW(),1,NOW());
                                  
                                  END;
                                  $$;
                                  
                                  \i /home/user/migration_data/projet_client.sql 
                                  

                                  Quand l'unite n'est pas crée ca me crée l'unite avec le nom de l'article ace un id, mais moi j'aimerais avoir le nom de l'unité, de plus ca me crée le nom de la catégorie, mais ca me crée à chaque fois une nouvelle ligne avec la catégorie que je vein de crée, dites moi si vous voulez plus d'information, je ne suis pas chez moi, mais quand je pourrais je vous donnerais des informations complémentaire si vous le demandez

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 février 2020 à 21:24:54

                                    Regarde ce que tu mets dans L'INSERT INTO unité... p_name... mets y ce dont tu as besoin ... p_uom_id non ?

                                    Quand tu insères la catégorie c'est pareil, tu mets "catégorie à definir" ... tout le temps  .. 

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                      26 février 2020 à 16:27:00

                                      J'ai un autre problème, quand j'insère un article à la main dans mon logiciel, je peux y import une image, quand j'importe celle-ci à la main j'ai ce résultat dans la base de données: 

                                      On voit que le champ res_name name [TE01ST] Test 1 reprend le champ default code et le champ name de la table product_template.

                                      SAuf que quand j'exécute la procédure suivante : 

                                      CREATE OR REPLACE PROCEDURE insertion_product_from_xml (
                                          p_name character varying,
                                          p_sequence integer,
                                          p_type character varying,
                                          p_rental boolean,
                                          p_categ_id character varying,
                                          p_list_price numeric,
                                          p_volume double precision,
                                          p_weight numeric,
                                          p_sale_ok boolean,
                                          p_purchase_ok boolean,
                                          p_uom_id character varying,
                                          p_uom_po_id character varying,
                                          p_company_id integer,
                                          p_active boolean,
                                          p_default_code character varying,
                                          p_create_uid integer,
                                          p_write_uid integer,
                                          p_service_type character varying,
                                          p_sale_line_warn character varying,
                                          p_expense_policy character varying,
                                          p_invoice_policy character varying,
                                          p_responsible_id integer,
                                          p_sale_delay double precision,
                                          p_tracking character varying,
                                          p_purchase_method character varying,
                                          p_purchase_line_warn character varying
                                      )
                                      LANGUAGE PLPGSQL
                                      AS $$
                                      DECLARE
                                       v_unit_id INTEGER;
                                       v_categ_id INTEGER;
                                      BEGIN
                                          -- Recherche si unité existe
                                          SELECT INTO v_unit_id id
                                          FROM uom_uom
                                          WHERE name = p_uom_id;
                                          
                                          -- si existe pas
                                          IF v_unit_id IS NULL THEN
                                              -- on crée une nouvelle unité
                                              INSERT INTO "public"."uom_uom" ( "id","name","category_id","factor","rounding","active","uom_type","measure_type","create_uid","create_date","write_uid","write_date" )
                                              VALUES ( nextval('uom_uom_id_seq'), p_uom_id,1,1,0.01,TRUE,'reference','unit',1,NOW(),1,NOW() );
                                              -- et on récupère son id
                                              v_unit_id := currval( 'uom_uom_id_seq' );
                                          END IF;
                                          
                                          -- Recherche si catégorie existe
                                          SELECT INTO v_categ_id id
                                          FROM product_category
                                          WHERE parent_path  = p_categ_id;
                                          
                                          -- si existe pas
                                          IF v_categ_id IS NULL THEN
                                              -- on crée une nouvelle catégorie
                                              INSERT INTO "public"."product_category" ("id","parent_path","name","complete_name","create_uid","create_date","write_uid","write_date")
                                              VALUES ( nextval('product_category_id_seq'),p_categ_id,'Libelle à définir','Libelle à définir',2,NOW(),2,NOW());
                                              -- et on récupère son id
                                              v_categ_id := currval( 'product_category_id_seq' );
                                          END IF;
                                      
                                          
                                          INSERT INTO "public"."product_template" ( "id","name","sequence","type","rental","categ_id","list_price","volume","weight","sale_ok","purchase_ok","uom_id","uom_po_id","company_id","active","default_code","create_uid","create_date","write_uid","write_date","service_type","sale_line_warn","expense_policy","invoice_policy","responsible_id","sale_delay","tracking","purchase_method","purchase_line_warn")
                                          VALUES (nextval('product_template_id_seq'), p_name, p_sequence, p_type, p_rental, v_categ_id, p_list_price, p_volume, p_weight, p_sale_ok, p_purchase_ok, v_unit_id, v_unit_id, p_company_id, p_active, p_default_code, p_create_uid, NOW(), p_write_uid, NOW(), p_service_type, p_sale_line_warn, p_expense_policy, p_invoice_policy, p_responsible_id, p_sale_delay, p_tracking, p_purchase_method, p_purchase_line_warn);
                                           
                                          INSERT INTO product_product ("default_code","active","product_tmpl_id","volume","weight","create_uid","create_date","write_uid","write_date")
                                          VALUES (p_default_code,p_active,currval( 'product_template_id_seq' ),p_volume,p_weight,p_create_uid, NOW(), p_write_uid, NOW());
                                      
                                           INSERT INTO ir_attachment (name,res_name,res_model,res_model_name,res_field,res_id,company_id,type,store_fname,file_size,checksum,mimetype,index_content,active,create_uid,create_date,write_uid,write_date)
                                          VALUES ('image_medium','[p_default_code ] p_name','product.template','Modèle d''article','image_medium',currval( 'product_template_id_seq' ),1,'binary','87/87a18769527837c4ace79b3337636eb1f61d85f9',12109,'7a18769527837c4ace79b3337636eb1f61d85
                                      f9','image/png','image',TRUE,1,NOW(),1,NOW());
                                      
                                          INSERT INTO ir_attachment (name,res_name,res_model,res_model_name,res_field,res_id,company_id,type,store_fname,file_size,checksum,mimetype,index_content,active,create_uid,create_date,write_uid,write_date)
                                          VALUES('image_small','[p_default_code ] p_name','product.template','Modèle d''article','image_small',currval( 'product_template_id_seq' ),1,'binary','e7/e7306de1a6766d3ca6c698db595edd7f099497f9',3545,'e7306de1a6766d3ca6c698db595edd7f099497f9'
                                      ,'image/png','image',TRUE,1,NOW(),1,NOW());
                                      
                                          INSERT INTO ir_attachment (name,res_name,res_model,res_model_name,res_field,res_id,company_id,type,store_fname,file_size,checksum,mimetype,index_content,active,create_uid,create_date,write_uid,write_date)
                                          VALUES('image','[p_default_code] p_name','product.template','Modèle d''article','image',currval( 'product_template_id_seq' ),1,'binary','6b/6bec80842f1621b05f3f64c766151f359c978bcd',204268,'6bec80842f1621b05f3f64c766151f359c978bcd','image/png','image',TRUE,1,NOW(),1,NOW());
                                          
                                      END;
                                      $$;
                                      
                                      CALL insertion_product_from_xml ('TEST 2',1,'product',FALSE,'2.20.23.5.9',16.95,0,0.00,TRUE,TRUE,'MLT','MLT',1,TRUE,'TE02ST',2,2,'manual','no-message','no','order',2,0,'none','receive','no-message');
                                      
                                      DROP PROCEDURE insertion_product_from_xml CASCADE;

                                      J'obtent ce résultat dans la base de donées : 

                                      On peut voir que le champ res_name est [p  default code] p name alrs que moi j'aimerais avoir [TE02ST] TEST 2 

                                      En fait ce que j'aimerais faire c'est récupérer le champ default_code de la table product_template et le champ name de la table product_template et le mettre dnas le champ res_name comme j'ai essayer de le faire  au-dessus mais ca ne fonctionne pas 

                                      Pouvez vous m'aider j'ai cherché pendant 1 semaine et je n'ai pas trouver de solution, et c'est très important

                                      Pour infos j'ai réussi à me débloquer sur ce que je vous avez demandez 

                                      ET le "catégorie à définir " moi je n'ai pas à la géré c'est au client 

                                      Dans l'attente de votre retour 

                                      -
                                      Edité par VictorLcmt 1 mars 2020 à 21:44:37

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Mettre résultat d'une requête dan un fichier texte

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown