Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ERRO

CREATE 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 INCLUINDO_PRODUTO (COD_PRODUTO, DESCRICAO, CATEGORIA) VALUES (p_COD_PRODUTO, p_DESCRICAO, p_CATEGORIA); COMMIT; END;


SEGUINTE ERRO; Procedure INCLUINDO_PRODUTO compilado

LINE/COL ERROR


5/1 PL/SQL: SQL Statement ignored 5/13 PL/SQL: ORA-04044: procedimento, função, pacote ou tipo não é permitido aqui Erros: verifique o log do compilador

1 resposta
solução!

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.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade