92 lines
3.5 KiB
MySQL
92 lines
3.5 KiB
MySQL
-- Step 1: Create the stored procedure
|
|
CREATE OR REPLACE PROCEDURE manage_data IS
|
|
new_products INTEGER default 3;
|
|
new_orders INTEGER default 10;
|
|
new_users INTEGER default 2;
|
|
new_transactions INTEGER default 20;
|
|
new_tasks INTEGER default 5;
|
|
BEGIN
|
|
FOR i IN 1..new_products LOOP
|
|
INSERT INTO products (id, name, category, quantity)
|
|
VALUES (seq_products.NEXTVAL,
|
|
DBMS_RANDOM.STRING('A', 10),
|
|
DBMS_RANDOM.STRING('A', 20),
|
|
TRUNC(DBMS_RANDOM.VALUE(1, 100)));
|
|
END LOOP;
|
|
|
|
|
|
FOR i IN 1..new_orders LOOP
|
|
INSERT INTO orders (id, description, status)
|
|
VALUES (seq_orders.NEXTVAL,
|
|
DBMS_RANDOM.STRING('A', 50),
|
|
DBMS_RANDOM.STRING('A', 20));
|
|
END LOOP;
|
|
|
|
|
|
FOR i IN 1..new_users LOOP
|
|
INSERT INTO users (id, created_at, username, age, location)
|
|
VALUES (seq_users.NEXTVAL, SYSDATE,
|
|
DBMS_RANDOM.STRING('A', 15),
|
|
TRUNC(DBMS_RANDOM.VALUE(18, 60)),
|
|
DBMS_RANDOM.STRING('A', 20));
|
|
END LOOP;
|
|
|
|
|
|
FOR i IN 1..new_transactions LOOP
|
|
INSERT INTO transactions (id, amount, currency)
|
|
VALUES (seq_transactions.NEXTVAL,
|
|
ROUND(DBMS_RANDOM.VALUE(1, 10000), 2),
|
|
DBMS_RANDOM.STRING('A', 3));
|
|
END LOOP;
|
|
|
|
|
|
FOR i IN 1..new_tasks LOOP
|
|
INSERT INTO tasks (id, status, priority, type, assigned_to)
|
|
VALUES (seq_tasks.NEXTVAL,
|
|
DBMS_RANDOM.STRING('A', 20),
|
|
TRUNC(DBMS_RANDOM.VALUE(1, 10)),
|
|
DBMS_RANDOM.STRING('A', 20),
|
|
DBMS_RANDOM.STRING('A', 15));
|
|
END LOOP;
|
|
|
|
-- Update 2 random rows in each table
|
|
UPDATE products SET quantity = TRUNC(DBMS_RANDOM.VALUE(1, 200))
|
|
WHERE id IN (SELECT id FROM products ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 2 ROWS ONLY);
|
|
|
|
UPDATE orders SET status = DBMS_RANDOM.STRING('A', 20)
|
|
WHERE id IN (SELECT id FROM orders ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 2 ROWS ONLY);
|
|
|
|
UPDATE users SET age = TRUNC(DBMS_RANDOM.VALUE(18, 75))
|
|
WHERE id IN (SELECT id FROM users ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 2 ROWS ONLY);
|
|
|
|
UPDATE transactions SET amount = ROUND(DBMS_RANDOM.VALUE(1, 5000), 2)
|
|
WHERE id IN (SELECT id FROM transactions ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 2 ROWS ONLY);
|
|
|
|
UPDATE tasks SET priority = TRUNC(DBMS_RANDOM.VALUE(1, 10))
|
|
WHERE id IN (SELECT id FROM tasks ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 2 ROWS ONLY);
|
|
|
|
-- Delete 1 random row from each table
|
|
DELETE FROM products WHERE id = (SELECT id FROM products ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 1 ROW ONLY);
|
|
DELETE FROM orders WHERE id = (SELECT id FROM orders ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 1 ROW ONLY);
|
|
DELETE FROM users WHERE id = (SELECT id FROM users ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 1 ROW ONLY);
|
|
DELETE FROM transactions WHERE id = (SELECT id FROM transactions ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 1 ROW ONLY);
|
|
DELETE FROM tasks WHERE id = (SELECT id FROM tasks ORDER BY DBMS_RANDOM.VALUE FETCH FIRST 1 ROW ONLY);
|
|
|
|
COMMIT;
|
|
END;
|
|
/
|
|
|
|
-- Step 2: Create a scheduled job to run every 10 seconds
|
|
BEGIN
|
|
DBMS_SCHEDULER.create_job (
|
|
job_name => 'JOB_MANAGE_DATA',
|
|
job_type => 'PLSQL_BLOCK',
|
|
job_action => 'BEGIN manage_data; END;',
|
|
start_date => SYSTIMESTAMP,
|
|
repeat_interval => 'FREQ=SECONDLY; INTERVAL=10',
|
|
enabled => TRUE
|
|
);
|
|
END;
|
|
/
|
|
|