Você pode usar as seguintes etapas para escrever um procedimento armazenado Oracle para implementar a inserção de dados em lote:
-
Crie uma tabela para armazenar dados de teste, por exemplo:
CREATE TABLE test_data (
id NUMBER,
nome VARCHAR2(50),
idade NUMBER
); -
Crie um procedimento armazenado que aceite um parâmetro n, indicando o número de linhas de dados a serem inseridas. No procedimento armazenado, use o loop FOR para inserir dados, por exemplo:
CRIE OU SUBSTITUA O PROCEDIMENTO insert_test_data(n IN NUMBER) AS
BEGIN
FOR i IN 1…n LOOP
INSERT INTO test_data VALUES (i, 'Name ' || i, i * 10);
END LOOP;
COMPROMETER-SE;
FIM; -
Chame um procedimento armazenado para inserir dados, por exemplo:
chame insert_test_data(10000);
Isso inserirá 10.000 linhas de dados na tabela test_data.
Nota: No teste de desempenho real, a quantidade de dados e a implementação do procedimento armazenado devem ser ajustadas de acordo com os requisitos e ambiente de teste específicos. Ao mesmo tempo, deve-se prestar atenção à integridade dos dados e aos problemas de desempenho, como o uso de indexação, particionamento e outras tecnologias apropriadas para otimizar o desempenho da consulta.
Como chamar o procedimento armazenado regularmente?
No Oracle, você pode usar o pacote DBMS_SCHEDULER para chamar procedimentos armazenados periodicamente. As etapas específicas são as seguintes:
-
Crie um procedimento armazenado, por exemplo:
CREATE OR REPLACE PROCEDURE my_proc AS
BEGIN
-
FIM lógico do procedimento armazenado; -
Para criar um trabalho, use o procedimento DBMS_SCHEDULER.CREATE_JOB para criar um trabalho, por exemplo:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'my_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN my_proc; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DAILY; BYHOUR=0; BYMINUTE=0 ; BYSECOND=0;',
habilitado => TRUE
);
FIM;O nome da tarefa é my_job, o tipo é PLSQL_BLOCK, a ação de execução é chamar o procedimento armazenado my_proc, a hora de início é a hora atual e o intervalo de repetição é uma vez por dia às 0:00 e a tarefa está habilitada .
-
Para iniciar o trabalho, use o procedimento DBMS_SCHEDULER.ENABLE para iniciar o trabalho, por exemplo:
BEGIN
DBMS_SCHEDULER.ENABLE('meu_trabalho');
FIM;Essa instrução inicia um trabalho chamado my_job.
Nota: Ao usar o pacote DBMS_SCHEDULER, você precisa ter permissões suficientes, como CREATE JOB, CREATE EXTERNAL JOB, MANAGE SCHEDULER e outras permissões. Ao mesmo tempo, você precisa prestar atenção ao tempo de execução e à frequência dos trabalhos para evitar afetar o desempenho do sistema.
Então, como excluir este trabalho agendado do Oracle?
Para excluir cron jobs para Oracle, você pode usar as seguintes etapas:
-
Efetue login no usuário sys no banco de dados Oracle ou um usuário com autoridade DBA.
-
Use o seguinte comando para visualizar todos os cron jobs atuais:
SELECT * FROM dba_scheduler_jobs;
-
Encontre o nome do trabalho cron que deseja excluir, exclua o trabalho com o seguinte comando:
DROP JOB job_name;
Entre eles, job_name é o nome do cron job a ser excluído.
-
Confirme se o cron job foi excluído com o seguinte comando:
SELECT * FROM dba_scheduler_jobs;
Se o trabalho tiver sido excluído, ele não aparecerá nos resultados.
Observação: A exclusão de um trabalho agendado pode afetar a operação normal do banco de dados, prossiga com cuidado. Recomenda-se fazer backup dos dados relevantes antes da exclusão.
Escreva um script que adiciona aleatoriamente 200 dados à tabela de dados a cada 1 segundo em 10 minutos
Pergunta, aqui está um script Oracle que faz o que você deseja:
DECLARE
i NUMBER := 1;
BEGIN
WHILE i <= 10 LOOP
INSERT INTO your_table (column1, column2, column3)
SELECT dbms_random.string('U', 10), dbms_random.string('U', 10), dbms_random.string('U', 10)
FROM dual
CONNECT BY level <= 200;
COMMIT;
DBMS_LOCK.SLEEP(1);
i := i + 1;
END LOOP;
END;
Observe que você precisará substituir "your_table" pelo nome da tabela real à qual está adicionando dados e alterar os nomes das colunas e os tipos de dados conforme necessário. Este script usa o pacote DBMS_RANDOM para gerar strings aleatórias e usa a função DBMS_LOCK.SLEEP para pausar por 1 segundo entre cada inserção. Por fim, use a instrução COMMIT para garantir que os dados persistam no banco de dados.
Você pode modificá-lo para mim? Agora só preciso que o campo id seja aleatório e os outros campos sejam valores fixos
DECLAREi
NÚMERO := 1;
BEGIN
WHILE i <= 10 LOOP
INSERT INTO your_table (id, column1, column2, column3)
SELECT dbms_random.value(1, 1000), 'fixed_value1', 'fixed_value2', 'fixed_value3'
FROM dual
CONNECT BY level <= 200;
COMPROMETER-SE;
DBMS_LOCK.SLEEP(1);
i := i + 1;
END LOOP;
FIM;
请注意,您需要将“your_table”替换为您要向其中添加数据的实际表名,并根据需要更改列名和数据类型。此脚本使用DBMS_RANDOM包生成随机数,并使用DBMS_LOCK.SLEEP函数在每次插入之间暂停1秒钟。最后,使用COMMIT语句确保数据被持久化到数据库中。