O erro ORA-04044 que você está encontrando na tentativa de criar a procedure INCLUINDO_PRODUTO
está relacionado a uma confusão entre o nome da tabela e o nome da procedure. No comando INSERT INTO
, você utilizou INCLUINDO_PRODUTO
como se fosse o nome da tabela, mas, na verdade, é o nome da procedure que você está tentando criar. Isso causa um conflito, pois o Oracle espera uma referência a uma tabela ou view nessa posição, e não a uma procedure.
Para corrigir esse erro, você precisa garantir que o nome da tabela na qual você deseja inserir os registros seja corretamente especificado no comando INSERT INTO
. Supondo que o nome da sua tabela seja realmente PRODUTO_EXERCICIO
(como indicado pelos tipos dos parâmetros), a correção seria:
CREATE OR REPLACE PROCEDURE INCLUINDO_PRODUTO (
p_COD_PRODUTO IN PRODUTO_EXERCICIO.COD_PRODUTO%TYPE,
p_DESCRICAO IN PRODUTO_EXERCICIO.DESCRICAO%TYPE,
p_CATEGORIA IN PRODUTO_EXERCICIO.CATEGORIA%TYPE
) IS
BEGIN
INSERT INTO PRODUTO_EXERCICIO (COD_PRODUTO, DESCRICAO, CATEGORIA)
VALUES (p_COD_PRODUTO, p_DESCRICAO, p_CATEGORIA);
COMMIT;
END;
/
Nessa correção, substituí INCLUINDO_PRODUTO
por PRODUTO_EXERCICIO
na instrução INSERT INTO
, referindo-se corretamente ao nome da tabela. Além disso, usei CREATE OR REPLACE PROCEDURE
para que, se a procedure já existir, ela seja substituída pela nova definição sem causar erros de compilação devido à existência prévia.
Note que o uso de COMMIT
dentro de procedures pode não ser recomendado em todos os contextos, especialmente em aplicações maiores ou transações que exigem maior controle. Em muitos casos, é preferível controlar as transações fora das procedures para ter mais flexibilidade e garantir a consistência dos dados.