Jump to content
Alexandre Garcia

PL/SQL - Select retorna nenhum valor condição do IF é verdadeiro

Recommended Posts

Preciso fazer um IF onde a condição verdade seria o não retorno de uma SQL. Isso é possível?

 

Ex: Faço o busca para descobrir se um clube foi campeão entre 1900 e 1950 se não existir escreva não existe. Senão escreva existe.

Share this post


Link to post
Share on other sites

Já ate consegui fazer algo Motta. O problema agora está no tratamento do erro NO_DATA_FOUND. Quando o SELECT não retorna nada ele não vai para o else e tudo para e saída é como na figura 01. Quando o SELECT retorna tudo funciona OK(figura 02). Teoricamente quando o SELECT rodar e nao tiver nenhum ator participando de filmes no seculo XX retorno deve ser null eu creio.

 

CREATE OR REPLACE PROCEDURE excluir_NOT_SEC_XX (cod_prof NUMBER)
IS

    xx    NUMBER;
    slq   VARCHAR2(1000);
    
    ERRO_2292 EXCEPTION;
    PRAGMA
    EXCEPTION_INIT (ERRO_2292, -2292);
   
BEGIN

  slq := 'SELECT
      
                count(filme.ano)
                                  
          FROM 
                LOCACAO LEFT JOIN ((PARTICIPACAO RIGHT JOIN filme ON PARTICIPACAO.COD_FILME = filme.COD_FILME)
                                    LEFT JOIN PROFISSIONAL_CINEMA ON PARTICIPACAO.COD_PROFISSIONAL_CINEMA = PROFISSIONAL_CINEMA.COD_PROFISSIONAL_CINEMA) ON LOCACAO.COD_FILME = filme.COD_FILME
                WHERE FILME.ANO >1900 AND FILME.ANO < 2001 AND PARTICIPACAO.COD_PROFISSIONAL_CINEMA = '|| cod_prof || '
                GROUP BY FILME.ANO';
    EXECUTE IMMEDIATE slq INTO xx;

   

     IF xx > 0 then
      Dbms_output.put_line('Ator eh eh do seculo XX');
      
    ELSE
      Dbms_output.put_line('Ator nao do seculo XX');
      DELETE FROM profissional_cinema WHERE profissional_cinema.cod_profissional_cinema = cod_prof; 
    END IF;
    

    EXCEPTION 
      WHEN ERRO_2292 
      THEN Dbms_output.put_line('E NAO PODE SER EXCLUIDO POIS TEM PARTICIPACAO EM ALGUM FILME');
       
      WHEN NO_DATA_FOUND THEN

dbms_output.put_line('XXX');
      
   
END;
/

 

 

image.png.2c8c74c361c3e9ceeb3c4a8093c53d25.png

figura 01

 

image.png.8eac3e22c91a2e867c0fb831e881df43.png

figura 02

 

 

 

Nota:

Tenho uma constraint não permite excluir atores que participaram de filme.

Esse é objetivo:

Suponha a seguinte regra de negócio: nenhum profissional de cinema deve ser excluído, caso tenha participado em algum filme produzido no século passado.

 

 

image.png

Share this post


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

Publique o que fez.

Consegui Motta mas estou achando q o codigo está muito longo.

CREATE OR REPLACE PROCEDURE excluir_XX (cod_prof NUMBER)
IS

    cursor c_busca IS
                  SELECT FILME.ANO
                  FROM (PARTICIPACAO LEFT JOIN PROFISSIONAL_CINEMA ON PARTICIPACAO.COD_PROFISSIONAL_CINEMA = PROFISSIONAL_CINEMA.COD_PROFISSIONAL_CINEMA)
                        RIGHT JOIN filme ON PARTICIPACAO.COD_FILME = filme.COD_FILME
                  WHERE PROFISSIONAL_CINEMA.COD_PROFISSIONAL_CINEMA = cod_prof
                  GROUP BY PROFISSIONAL_CINEMA.COD_PROFISSIONAL_CINEMA,filme.ano
                  ORDER BY PROFISSIONAL_CINEMA.COD_PROFISSIONAL_CINEMA;

    
    v_filme_ano    filme.ano%type;
    flag NUMBER(4);
    
    ERRO_2292 EXCEPTION;
    PRAGMA
    EXCEPTION_INIT (ERRO_2292, -2292);


BEGIN
    OPEN c_busca;
        LOOP
            FETCH c_busca INTO v_filme_ano;
            EXIT WHEN c_busca%NOTFOUND;
      Dbms_output.put_line(v_filme_ano);
            IF v_filme_ano > 1900 AND v_filme_ano < 2001 THEN
        FLAG := v_filme_ano;
      END IF;
        END LOOP;
    Dbms_output.put_line(flag);
    CLOSE c_busca;
            
            
    IF flag > 1900 AND flag < 2001 THEN
      Dbms_output.put_line('Ator participou de filme no seculo XX');
      Dbms_output.put_line('Nao excluir');
    ELSE
      Dbms_output.put_line('Ator nao participou de filme no seculo XX');
      DELETE FROM profissional_cinema WHERE profissional_cinema.cod_profissional_cinema = cod_prof; 
      
    END IF;
    

    EXCEPTION 
      WHEN ERRO_2292 
      THEN Dbms_output.put_line('E NAO PODE SER EXCLUIDO POIS TEM PARTICIPACAO EM ALGUM FILME');
   
END;
/

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 Kefatif
      Prezados, boa tarde.
       
      Preciso de uma ajuda, tenho um select onde o usuário vai poder selecionar dentre os valores "1" e "2", mas gostaria que quando ele selecionasse o valor 2 fosse enviado um alerta de confirmação, estou tentando fazer através do evento blur, mas não estou sabendo fazer a comparação. Seria possível chamar o evento apenas se o valor selecionado for 2?
       
      Segue meu código teste abaixo.
       
      <!DOCTYPE html> <html> <head> <title>Teste</title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script> <script type="text/javascript"> $(function(){ //inserir os códigos aqui $("#fase").blur(function(){ alert("O input perdeu o foco."); }); }); </script> </head> <body> <label style="width:15%">Fase<b style="color:red">*</b><br> <select name="fase" id="fase" class="form-control" required style="width:100%" > <option value="1">1</option> <option value="2">2</option> </select> </label> <label style="width:15%">teste<b style="color:red">*</b><br> <select name="teste" class="form-control" required style="width:100%" > <option value="">Selecione</option> <option value="SIM">SIM</option> <option value="NÃO">NÃO</option> </select> </label> </body> </html>  
      Agradeço desde já.
       
      Abs.
    • By biakelly
      Olá Tudo bem?
       
      Poderiam me ajudar com a seguinte condição:
      <?php if ($row['facebook'] != "") { echo '<a class="btn btn-dark btn-social mx-2" href="<?php echo $row['facebook']; ?>"><i class="fab fa-facebook-f"></i></a>'; } else { echo ''; } ?>  
      Estou recebendo o seguinte erro:
      Parse error: syntax error, unexpected 'facebook' (T_STRING), expecting ';' or ',' in C:\xampp\htdocs\biazinha\inicial.php on line 371
       
       
      A linha 371 é essa:
      echo '<a class="btn btn-dark btn-social mx-2" href="<?php echo $row['facebook']; ?>"><i class="fab fa-facebook-f"></i></a>';  
       
       
    • By PToledo
      Tenho um IF, ElseIf, Else....
       
      Como contar somando, cada vezes que o IF, ElseIF ou Else for verdadeiro.
       
      Preciso contar a quantidade de vezes que o IF for setado, verdadeiro.
    • By biakelly
      Oi,
       
       não estou conseguindo fazer isso, podem me ajudar?
       
      <?php $botaoaluno = mysql_query("SELECT aluno FROM escola WHERE colegio_id='$colid'",$db); $alunoativo = mysql_num_rows($botaoaluno); if ($alunoativo = 1) { ?> <?php $pegaralunos = mysql_query("SELECT alunosdisponiveis FROM tabelasalunos WHERE userID='{$_SESSION['userid']}' and alunosID='{$objauALN["alunID"]}'", $db); $classe = mysql_num_rows($pegaralunos); if ($classe > 0) { ?> <button name="geraralunos">Aluno presente</button> <?php } else { ?> <button name="geraralunos">Aluno faltante</button> <? } } else{ ?> <p>Não tem aluno</p> <?php } ?> o que eu preciso, se o alunoativo for igual a 1, fazer o próximo IF, mas se ele for igual a 0 mostrar a mensagem (não tem aluno)
    • By PeeWee
      Opaa, o problema é o seguinte: preciso fazer uma busca no BD com esse código:
       
      $buscar = $pdo->prepare("SELECT * FROM `produtos` WHERE `titulo` LIKE '%$textoBusca%'");
              $buscar->execute();
              $retorno = array();
              $retorno['dados'] = '';
              $retorno['qtd'] = $buscar->rowCount();
              if($retorno['qtd'] >= 0){
                  while($conteudo = $buscar->fetchObject()){
                      $retorno['dados'] .= '<a href="#" id="'.$conteudo->id.':'.$conteudo->valor.'">'.utf8_encode($conteudo->titulo).'</a>';
                  }
              }
       
      O problema é que os resultados estão vindo duplicados (no BD só há 3 registros)
       
      Não tenho idéia do que fazer, se alguem puder ajudar agradeço desde já. 
       
×

Important Information

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