Jump to content
devenr

[Resolvido] Ajuda com procedure plsql

Recommended Posts

Estou com dificuldade na criação de uma procedure que receba três valores numéricos e insira um registro na tabela abaixo:

 

 

TB_MAIORES
NUMERO1   Primeiro valor
NUMERO2   Segundo valor
NUMERO3   Terceiro valor
MAIOR     Maior valor entre (NUMERO1, NUMERO2 e NUMERO3)

Share this post


Link to post
Share on other sites
22 horas atrás, Motta disse:

qual a dúvida ?

 

use o greatest

 

desenvolvi assim:

 

 

CREATE OR REPLACE PROCEDURE MAIOR(
p_numero1 INT,
p_numero2 INT,
p_numero3 INT
) IS
DECLARE
v_aux INT;

BEGIN
v_aux := 0;

IF p_numero1 >= v_aux THEN
v_aux := p_numero1;

IF p_numero2 >= v_aux THEN
v_aux := p_numero2;

IF p_numero2 >= v_aux THEN
v_aux := p_numero3;

INSERT INTO TB_MAIORES
(NUMERO1, NUMERO2, NUMERO3 ,MAIOR)
VALUES
(p_numero1, p_numero2, p_numero3, v_aux);

END

 

porém está me retornando esse erro:

Line/Col: 6/1 PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following: begin function pragma procedure subtype type <an identifier> <a double-quoted delimited-identifier> current cursor delete exists prior external language

Share this post


Link to post
Share on other sites

O "DECLARE" é apenas para TRIGGERS ou blocos anonimos

pode suprimir para Procedures.

Share this post


Link to post
Share on other sites
54 minutos atrás, Motta disse:

O "DECLARE" é apenas para TRIGGERS ou blocos anonimos

pode suprimir para Procedures.

 

 

Fiz algumas alterações porém continua o problema...

 

CREATE OR REPLACE PROCEDURE MAIORES(
    p_numero1 INT,
    p_numero2 INT,
    p_numero3 INT
) IS
 
v_aux TB_MAIORES.MAIOR%TYPE;
     
BEGIN
    
    IF p_numero1 >= v_aux THEN
        v_aux := p_numero1;
   
    IF p_numero2 >= v_aux THEN
        v_aux := p_numero2;
        
    IF p_numero3 >= v_aux THEN
        v_aux := p_numero3;
     
    INSERT INTO TB_MAIORES 
        (NUMERO1, NUMERO2, NUMERO3, MAIOR)  
    VALUES
        (p_numero1, p_numero2, p_numero3, v_aux);
END IF;
END MAIORES;
/

Share this post


Link to post
Share on other sites
4 minutos atrás, Motta disse:

Qual o erro agora ?

 

 

  • Erro(24,5): PLS-00103: Encontrado o símbolo "MAIORES" quando um dos seguintes símbolos era esperado: if

Share this post


Link to post
Share on other sites
CREATE OR REPLACE PROCEDURE MAIORES(
    p_numero1 INT,
    p_numero2 INT,
    p_numero3 INT
) IS
 
v_aux TB_MAIORES.MAIOR%TYPE;
     
BEGIN
    
    IF p_numero1 >= v_aux THEN
        v_aux := p_numero1;
    END IF;/*todo if tem de ter end if*/    
   
    IF p_numero2 >= v_aux THEN
        v_aux := p_numero2;    
    END IF;/*todo if tem de ter end if*/     
        
    IF p_numero3 >= v_aux THEN
        v_aux := p_numero3;    
    END IF;/*todo if tem de ter end if*/     
     
    INSERT INTO TB_MAIORES 
        (NUMERO1, NUMERO2, NUMERO3, MAIOR)  
    VALUES
        (p_numero1, p_numero2, p_numero3, v_aux);
END IF;/*este end if esta dsolto , sem o if correspondente */
END MAIORES;
/ 

 

Share this post


Link to post
Share on other sites
1 hora atrás, Motta disse:

CREATE OR REPLACE PROCEDURE MAIORES(
    p_numero1 INT,
    p_numero2 INT,
    p_numero3 INT
) IS
 
v_aux TB_MAIORES.MAIOR%TYPE;
     
BEGIN
    
    IF p_numero1 >= v_aux THEN
        v_aux := p_numero1;
    END IF;/*todo if tem de ter end if*/    
   
    IF p_numero2 >= v_aux THEN
        v_aux := p_numero2;    
    END IF;/*todo if tem de ter end if*/     
        
    IF p_numero3 >= v_aux THEN
        v_aux := p_numero3;    
    END IF;/*todo if tem de ter end if*/     
     
    INSERT INTO TB_MAIORES 
        (NUMERO1, NUMERO2, NUMERO3, MAIOR)  
    VALUES
        (p_numero1, p_numero2, p_numero3, v_aux);
END IF;/*este end if esta dsolto , sem o if correspondente */
END MAIORES;
/ 

 

 

Obrigado Motta! ajustei o END IF correspondente a cada IF e consegui criar a procedure, no entanto, ao executar a procedure colocando os parâmetros do INSERT, não está inserindo corretamente, chega a compilar a proc mas consulto na tabela e não retorna os dados que foram inseridos. 

 

tem ideia do que pode ser?

Share this post


Link to post
Share on other sites

Deu certo Motta! 

agradeço a ajuda 

19 horas atrás, Motta disse:

Coloca um commit no fim da rotina , pode ser isto.

 

Deu certo Motta!

Agradeço a ajuda!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By andreluis78
      Olá a todos.
      Criei um procedimento para verificar se um usuário está cadastrado no banco de dados.
      Utilizo Firebird como BD e componentes Zeos para acessar o banco.
      Resolvi criar uma query em tempo de execução para fazer a verificação. Não dá nenhum erro, porém, quando digito o nome do usuário no Edit e clico
      no botão que executa o procedimento, ele dá ''usuário inexistente'', mesmo se o nome do usuário estiver cadastrado no banco.
       
      Segue o código:
       
      procedure Tfrm_login.SpeedButton1Click(Sender: TObject); var Qry : TZQuery; begin   Qry:=TZQuery.Create(nil);   Qry.Connection := dm_dados.ZConnection1;  //componente de conexão   Qry.SQL.Add('select codigo, nome, acessar, user, pass from clientes');   Qry.Open;   if Qry.Locate('USER',Edit1.Text,[]) then   begin     ShowMessage('usuário cadastrado');   end   else   begin     ShowMessage('usuário inexistente');     Edit1.SetFocus;   end;   FreeAndNil(Qry); end;  
      Se alguém puder ajudar agradeço desde já.
      Obrigado
    • By Motta
      TikTok evita bloqueio graças a acordo com Oracle e Walmart
    • By diegosrg
      Olá pessoal!
      Preciso de um help por favor.
      Seguinte, tenho uma base de dados abaixo e preciso incluir uma coluna com os valores acumulado do mês independente do produto.Base atual:
      YEARMONTH / PRODUTO/ VALOR 202001 /ABC / 123,00 202001 /DEF / 234,00 202002 /ABC / 289,00 202002 /GHU / 222,00  
      Com a nova coluna ficaria assim:
      YEARMONTH / PRODUTO/ VALOR / VALOR ACUMULADO 202001 /ABC / 123,00 / 357,00 202001 /DEF / 234,00 / 357,00 202002 /ABC / 289,00 / 511 202002 /GHU / 222,00 / 511  
      Alguém tem alguma dica?!
      Desde já agradeço
    • By gcors88
      Prezados, desenvolvi um gatilho onde este tem comunicação com outra tabela, uma é a coleta_sinal_vital, e onde o gatilho foi criado é na table  itcoleta_sinal_vital ( esta possui uma fk da primeira), a questão é que dentro do gatilho realizo um select na primeira tabela para consultar o valor inserido em uma coluna da primeira tabela, faço essa consulta baseada nessa fk que esta sendo inserida ou seja where = :new.cd_coleta_sinal_vital, a questão é que no momento em que esse select é executado ele não retorna dado nenhum, acredito que isto ocorre porque a inserção em ambas as tabelas é feito de forma simultânea, pois se comparado posteriormente o valor da coluna sempre é inserido, gostaria de saber se existe alguma forma de aplicar uma espera ou atraso neste gatilho para que ele possa capturar este valor sem problemas, grato!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.