MYSQL SP没有循环

时间:2014-08-26 13:36:50

标签: mysql

我发现了一个很好的SQL语句,它将掩盖生产数据(Howto generate meaningful test data using a MySQL function)。

我正在尝试将其添加为存储过程。

当我从查询中运行该函数时,它运行正常。

但是,当我从SP调用该函数时,记录是随机的,但具有相同的数据。如何使SP随机化每个记录,如查询调用????

所以,如果我运行这个:

UPDATE MAINTBL 
  SET first_name = (SELECT str_random('Cc{3}c(4)')),
    last_name = (SELECT str_random('Cc{5}c(6)')),
    email = (SELECT str_random('c{3}c(5)[.|_]c{8}c(8)@[google|yahoo|live|mail]".com"')),

我明白了:

first_name || last_name  || email
===========================================================
Xstpvb     || Slbynwcigi || vgsbtnl_obpvhahigqkfte@live.com
Vohv       || Nyeaqbn    || rtrc_nkjotdkpxhsrf@google.com
Nkjpxqm    || Ogrosyjwi  || ystbfz.egrowrtsnq@live.com
Mdig       || Cccepmxlla || tqxuwz.jzwjfborpufpi@mail.com

但是当它在SP中输出时:

DROP PROCEDURE IF EXISTS mask_data;

CREATE PROCEDURE mask_data()
  BEGIN
    UPDATE MAINTBL 
      SET first_name = (SELECT str_random('Cc{3}c(4)')),
        last_name = (SELECT str_random('Cc{5}c(6)')),
        email = (SELECT str_random('c{3}c(5)[.|_]c{8}c(8)@[google|yahoo|live|mail]".com"')),
END;

Then call it from a query:
    call mask_data;

我在每条记录中得到相同的输出:

first_name || last_name  || email
Ofgtlmz    || Mndbynbepn || vpngah.vcaxkhhmgqkd@yahoo.com
Ofgtlmz    || Mndbynbepn || vpngah.vcaxkhhmgqkd@yahoo.com
Ofgtlmz    || Mndbynbepn || vpngah.vcaxkhhmgqkd@yahoo.com
Ofgtlmz    || Mndbynbepn || vpngah.vcaxkhhmgqkd@yahoo.com

我做错了什么???

1 个答案:

答案 0 :(得分:1)

(从未答复中得到这个)

通过删除不必要的SELECTs来修复。