Files
notes/Golden_Gate/example_01/worlkoad_as_job.sql
2026-03-12 22:01:38 +01:00

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;
/