вторник, 28 октября 2008 г.

Вставка уникальных случайных значений

Иногда приходится передавать базу сторонним разработчикам для анализа ошибок. Перед передачей админов просят "обезличить", т.е. изменить данные таблиц.
Обычно делаю просто
update t1 set value='blablabla';
Но встречаются поля с unique constraint. Например, номера телефонов клиентов. Для них надо генерировать случайные данные. В таких случаях использую следующее:
DECLARE
CURSOR smsid
IS
SELECT ID
FROM sms;
randnum VARCHAR2 (20);
updated_rowcnt INTEGER;
BEGIN
FOR smsidrec IN smsid
LOOP
updated_rowcnt := 0;

WHILE updated_rowcnt = 0
LOOP
randnum := TO_CHAR (round(DBMS_RANDOM.VALUE (1000000, 999999999),0));

UPDATE sms
SET c_phone = randnum
WHERE ID = smsidrec.id AND NOT EXISTS (SELECT 1
FROM sms
WHERE c_phone = randnum);

updated_rowcnt := SQL%ROWCOUNT;
END LOOP;
END LOOP;
END;
/

среда, 22 октября 2008 г.

Начнем-с...

Пишем сюда свои скрипты, ништяки и всякую лабудень. Главная цель - это не хранить все в башке или в папке с кучей файлов, а тут. Не забываем вешать ярлыки на свои сообщения. Ну, и подписываться тоже надо.