Problema looping dados em uma função postgres usando% ROWTYPE

votos
1

Eu estou tentando criar uma função no postgres que recupera dados de uma tabela e insumos para outra. Eu estou usando o tipo ROWTYPE% para armazenar os dados temporários da instrução SELECT e, em seguida, iterar através dele com uma instrução de inserção, mas não tiveram sucesso! O seguinte é o meu código:

CREATE OR REPLACE FUNCTION rm_stock_take_add (icompany character varying, idate character varying) 
  RETURNS character varying AS

$BODY$

DECLARE

    loc_result    CHAR(50);

    -- Declaring a counter to increment for the index
    counter INTEGER;

    -- Declare a variable to hold rows from the stock table.
    row_data rm_stock%ROWTYPE;


BEGIN

     -- Iterate through the results of a query.
    FOR row_data IN 
    SELECT *
    FROM rm_stock 
    --WHERE company = icompany 
    ORDER BY company, rm_sto_code, rm_col_code  

        LOOP

      counter := counter + 1;
/*       
          INSERT IGNORE  INTO rm_stock_take
          ( 
           stock_ind, company, rm_stock_code, rm_col_code, rm_dye_lot_num, rm_take_date, rm_quantity_theo
          )
          VALUES 
          ( 
           counter, icompany, row_data.rm_sto_code, row_data.rm_col_code, row_data.rm_dye_lot_num, idate,
               row_data.rm_sto_on_hand_excl
          );

*/      
       END LOOP;



   RETURN counter :: character varying;

END;
$BODY$
 LANGUAGE 'plpgsql'VOLATILE;
ALTER FUNCTION rm_stock_take_add(icompany character varying, idate character varying) OWNER TO postgres;

Ok, então no momento eu estou apenas tentando ver se a função for loop usando o contador para contar a quantidade de loops e retornar esse número, mas não retornou nada ainda. Eu não tenho sido capaz de encontrar muita informação on-line ou em qualquer lugar em relação a este tipo de procedimento, e se alguém pode ajudar ou me guiar na direção certa será muito apreciada!

obrigado

Publicado 22/12/2008 em 11:51
fonte usuário
Em outras línguas...                            


1 respostas

votos
6

Tenho que trabalhar ...

aqui está o código para referência futura se alguém esbarra no mesmo problema!

CREATE OR REPLACE FUNCTION rm_stock_take_add(icompany character varying, idate character varying)
  RETURNS character varying AS
$BODY$


DECLARE
    loc_result CHAR(50);
    counter INTEGER = 1;
    row_data RECORD;

BEGIN
    FOR row_data IN SELECT rm_sto_code, rm_col_code, rm_dye_lot_num, rm_sto_on_hand_excl
    FROM rm_stock 
    WHERE company = icompany 
    ORDER BY company, rm_sto_code, rm_col_code  

    LOOP         
          INSERT IGNORE  INTO rm_stock_take
          ( 
               "stock_ind", "company", "rm_stock_code", "rm_col_code", "rm_dye_lot_num", "rm_take_date", "rm_quantity_theo"
          )
          VALUES 
          ( 
               counter, icompany, row_data.rm_sto_code, row_data.rm_col_code, row_data.rm_dye_lot_num, idate,
               row_data.rm_sto_on_hand_excl
          );   
          counter := counter + 1;

    END LOOP;

    loc_result := 'success';  
    RETURN loc_result ;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION rm_stock_take_add(icompany character varying, idate character varying) OWNER TO postgres;
Respondeu 22/12/2008 em 13:32
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more