MySQL Как мне зациклить хранимую процедуру? - PullRequest
1 голос
/ 24 февраля 2012

У меня есть хранимая процедура с именем Оценка (что-то1, что-то2); Оценка будет принимать некоторые параметры, искать их в базе данных и вставлять результаты в таблицу результатов.

ТеперьЯ хочу создать некоторый тип хранимой процедуры, которая будет постоянно вызывать Evaluate для итерации по всему файлу с разделителями-запятыми.Возможно ли это?

код псевдо

assessEntireFile()
{
  loop file
    Evaluate(single line from file)
   end loop
}



**The work flow of assessEntireFile() will be as followed:**
1. call assessEntireFile()
   --assessEntireFile will load and iterate over an input file (line-by-line)
2. each iteration will call Evaluate() on that line
   --evualte() will produce results in a table
3. complete

Ответы [ 2 ]

1 голос
/ 24 февраля 2012
DELIMITER $$

CREATE PROCEDURE assessEntireTable()
  READS SQL DATA
BEGIN

-- Declare variables according to your table/file structure
  DECLARE field1 int DEFAULT 0;
  DECLARE field2 VARCHAR(250) CHARACTER SET utf8;
-- /Declare variables according to your table/file structure

  DECLARE done int DEFAULT 0;
  DECLARE currentrow CURSOR FOR SELECT * FROM assessEntireFileTmp; 
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

  OPEN currentrow;
-- Adapt next line according to your table/file structure
  FETCH currentrow INTO field1,field2, ... ;
  WHILE done=0 DO
-- Adapt next 2 lines according to your table/file structure
     CALL Evaluate(field1, field2, ...);
     FETCH currentrow INTO field1,field2, ... ;
  END WHILE;
END $$

CREATE PROCEDURE assessEntireFile()
BEGIN
  DROP TABLE IF EXISTS assessEntireFileTmp;
  CREATE TABLE assessEntireFileTmp (

--  Your needed structure here

  );
  LOAD DATA INFILE '<file_name>'
     INTO TABLE assessEntireFileTmp
--   More needed parameters here
  ;

  CALL assessEntireTable();

  DROP TABLE assessEntireFileTmp;
END $$  

DELIMITER ;
0 голосов
/ 24 февраля 2012

Вы можете использовать цикл while в SQL

@count = 1
while @count < 1000
    begin
    update etc
@count = @count + 1
end

http://msdn.microsoft.com/en-us/library/ms178642.aspx

...