é q eu dei um exemplo muito simples, e nesse caso, realmente não precisava… vc pode usar uma instrução SQL padrão só:
INSERT
INTO estagiarios
(
MATRICULA,
NOME,
ENDERECO,
SALARIO
)
SELECT MATRICULA,
NOME,
ENDERECO,
SALARIO
FROM funcionarios
WHERE salario < 500
;
agora, quando as coisas começam a complicar, usar PL/SQL facilita a vida. digamos q a matricula dos estagiarios nao pudesse ser o mesmo numero de quando eles estavam na tabela de funcionarios, pois poderia esse numero ja estar em uso, e ele seja chave primaria. digamos q antes de inserir na tabela estagiarios eu quisesse descobrir uma matricula valida, então isso ajudaria:
DECLARE
V_MAT NUMBER(5, 0);
BEGIN
FOR V_FUNC IN
(SELECT * FROM funcionarios WHERE salario < 500) – aqui vc usa o select que quiser
LOOP
– primeiro faço uma lógica qualquer (exemplo, poderia ser algo mais complicado, aqui poderiamos ter varios “select into”)
SELECT MAX(MATRICULA) + 1
INTO V_MAT
FROM estagiarios;
– depois faço o insert, usando V_MAT
INSERT
INTO estagiarios
(
MATRICULA,
NOME,
ENDERECO,
SALARIO
)
VALUES
(
V_MAT,
V_FUNC.NOME,
V_FUNC.ENDERECO,
V_FUNC.SALARIO
)
;
END LOOP;
END;