Проблема зацикливания данных в функции postgres с использованием% ROWTYPE - PullRequest
1 голос
/ 22 декабря 2008

Я пытаюсь создать функцию в postgres, которая извлекает данные из одной таблицы и вводит их в другую. Я использую тип% ROWTYPE, чтобы сохранить временные данные из оператора select, а затем перебрать его с помощью оператора вставки, но безуспешно! Вот мой код:

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 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;

Хорошо, так что в данный момент я просто пытаюсь увидеть, зацикливается ли функция, используя счетчик для подсчета количества циклов и возврата этого числа, но пока ничего не вернул. Я не смог найти много информации в Интернете или где-либо еще относительно такого рода процедур, и если кто-то может помочь или направить меня в правильном направлении, это будет с благодарностью!

Спасибо

1 Ответ

6 голосов
/ 22 декабря 2008

Работай ...

вот код для дальнейшего использования, если кто-то столкнется с той же проблемой!

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 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...