1
resposta

Erro: ORA-01775: loop na cadeia de sinônimos

ao copiar o cabeçalho e colar no SQL Developer

iniciamente percebi que as funções não foram criadas no curso

a primeira parte do codigo

CREATE OR REPLACE PACKAGE PRODUTO_EXERCICIO_PAC IS

FUNCTION RETORNA_IMPOSTO (p_COD_PRODUTO produto_venda_exercicio.cod_produto%type) RETURN produto_venda_exercicio.percentual_imposto%type;

FUNCTION RETORNA_CATEGORIA (p_COD IN produto_exercicio.cod%type) RETURN produto_exercicio.categoria%type;

PROCEDURE INCLUINDO_PRODUTO (p_COD produto_exercicio.cod%type , p_DESCRICAO produto_exercicio.descricao%type , p_CATEGORIA produto_exercicio.categoria%type);

PROCEDURE INCLUINDO_DADOS_VENDA ( p_ID produto_venda_exercicio.id%type, p_COD_PRODUTO produto_venda_exercicio.cod_produto%type, p_DATA produto_venda_exercicio.data%type, p_QUANTIDADE produto_venda_exercicio.quantidade%type, p_PRECO produto_venda_exercicio.preco%type );

END;

1 resposta

Daniel, boa tarde. O código que você mostrou define apenas a especificação de um package PL/SQL chamado PRODUTO_EXERCICIO_PAC. Isso declara as funções e procedimentos, mas não implementa o que eles fazem.

Por isso quando você insere apenas essa parte no Oracle SQL Developer, ele não cria as funções, porque ainda falta o corpo do pacote (PACKAGE BODY), onde a lógica real de cada função/procedimento é escrita.

CREATE OR REPLACE PACKAGE BODY PRODUTO_EXERCICIO_PAC IS

  FUNCTION RETORNA_IMPOSTO (p_COD_PRODUTO produto_venda_exercicio.cod_produto%type)
  RETURN produto_venda_exercicio.percentual_imposto%type IS
    v_imposto produto_venda_exercicio.percentual_imposto%type;
  BEGIN
    SELECT percentual_imposto INTO v_imposto
    FROM produto_venda_exercicio
    WHERE cod_produto = p_COD_PRODUTO;

    RETURN v_imposto;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      RETURN NULL;
  END;

  FUNCTION RETORNA_CATEGORIA (p_COD IN produto_exercicio.cod%type)
  RETURN produto_exercicio.categoria%type IS
    v_categoria produto_exercicio.categoria%type;
  BEGIN
    SELECT categoria INTO v_categoria
    FROM produto_exercicio
    WHERE cod = p_COD;

    RETURN v_categoria;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      RETURN NULL;
  END;

  PROCEDURE INCLUINDO_PRODUTO (
    p_COD produto_exercicio.cod%type,
    p_DESCRICAO produto_exercicio.descricao%type,
    p_CATEGORIA produto_exercicio.categoria%type
  ) IS
  BEGIN
    INSERT INTO produto_exercicio (cod, descricao, categoria)
    VALUES (p_COD, p_DESCRICAO, p_CATEGORIA);
  END;

  PROCEDURE INCLUINDO_DADOS_VENDA (
    p_ID produto_venda_exercicio.id%type,
    p_COD_PRODUTO produto_venda_exercicio.cod_produto%type,
    p_DATA produto_venda_exercicio.data%type,
    p_QUANTIDADE produto_venda_exercicio.quantidade%type,
    p_PRECO produto_venda_exercicio.preco%type
  ) IS
  BEGIN
    INSERT INTO produto_venda_exercicio (id, cod_produto, data, quantidade, preco)
    VALUES (p_ID, p_COD_PRODUTO, p_DATA, p_QUANTIDADE, p_PRECO);
  END;

END;