我发现了一个很好的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
我做错了什么???
答案 0 :(得分:1)
(从未答复中得到这个)
通过删除不必要的SELECTs
来修复。