Jump to content
MrFilipe

Cursores em SQL

Recommended Posts

MrFilipe

Boas pessoal,

Estou com dificuldades em realizar uma script em sql onde uso cursores.

Alguém me poderá ajudar??

Cumps.


Abraço.

Share this post


Link to post
Share on other sites
MrFilipe

Estou a criar um sistema de reservas de salas de aula, e abri este tópico porque estava com dificuldades em criar uns comandos em sql.

Depois de me fornecerem os horarios das salas, criei uma script em sql que permitia mostrar as salas ocupadas e salas vazias, em diferentes, tempos, Dia da semana e Data. Mas eu fiz isto só para uma semana... Agora gostaria de fazer isto para o ano lectivo inteiro, será que alguém me poderá ajudar?

Obrigado.


Abraço.

Share this post


Link to post
Share on other sites
brunoais

De que ajuda precisas?

Eu só vou ajudar-te em coisas pequenas. Nada de complexo.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
ruimcosta

Possivelmente se já tens feito para uma semana, apenas terás de alterar o sql para o intervalo das tadas que queres e depois alterar o espaço de visualização da tabela....digo eu...


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
ruimcosta
select * from tabela where data between '2010-01-01' and '2011-12-31'


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
MrFilipe

Eu também tinha pensado no between, eu criei um dowhile com este código abaixo, mas não sei se o between aqui dará

DELIMITER $$

DROP PROCEDURE IF EXISTS `reserva`.`dowhile` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `dowhile`()
BEGIN
-- Definição de variáveis utilizadas na Procedure
  DECLARE tempo INTEGER;
  DECLARE diasemana INTEGER;

  DECLARE existe_mais_linhas INT DEFAULT 0;
  DECLARE nsala CHAR(5);

-- Definição do cursor
  DECLARE minhas_salas CURSOR FOR SELECT DISTINCT salaid FROM reserva.sala;

    -- Definição da variável de controle de looping do cursor
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;

  -- Abertura do cursor
  OPEN minhas_salas;

  -- Looping de execução do cursor
  meuLoop: LOOP
  FETCH minhas_salas INTO nsala;

    -- Controle de existir mais registros na tabela
  IF existe_mais_linhas = 1 THEN
  LEAVE meuLoop;
  END IF;

    SET diasemana=1;
    WHILE diasemana<=5 DO BEGIN
      SET tempo=1;
      WHILE tempo<=18 DO
        INSERT INTO reserva.calendario (Ocupado, Data, Dia, Tempo, Sala_SalaId)
          VALUES('0','2011-01-01',diasemana,tempo,nsala);
        SET tempo=tempo+1;
      END WHILE;
      SET diasemana=diasemana+1;
      END;
    END WHILE;
  END LOOP meuLoop;


END $$

DELIMITER ;

eu cria saber de que forma vou alterar esta script para prolongar a data...


Abraço.

Share this post


Link to post
Share on other sites
MrFilipe

Já agora tenho outra duvida, que é bastante importante para o meu trabalho que consiste em, eu selecciono uma sala verifico o seu horário e onde tem 0 na ocupação clico em reservar. Mas depois de finalizar a reserva essa sala no seu horário não passa para 1, fica sempre a 0  ;). Que poderei fazer para mudar isso de forma a ficar correcto?


Abraço.

Share this post


Link to post
Share on other sites
ruimcosta

Biba,

Em relação ao SP não te posso ajudar pois não é o meu forte, mas em relação à tua última questão, tens de mostrar o que fazes para vermos o que poderá estar errado.  🤔


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
ruimcosta
Mas depois de finalizar a reserva essa sala no seu horário não passa para 1, fica sempre a 0  . Que poderei fazer para mudar isso de forma a ficar correcto?

Desconheço o teu código...como podemos ajudar?


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
MrFilipe

Mas eu suspeito que o sql é que esta mal, posso na mesma fornecer o código php, mas eu estou a fazer em Dreamweaver...

<?php require_once('Connections/ReservaSala.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$maxRows_RecordReserva = 10;
$pageNum_RecordReserva = 0;
if (isset($_GET['pageNum_RecordReserva'])) {
  $pageNum_RecordReserva = $_GET['pageNum_RecordReserva'];
}
$startRow_RecordReserva = $pageNum_RecordReserva * $maxRows_RecordReserva;

$colname_RecordReserva = "-1";
if (isset($_GET['reservaid'])) {
  $colname_RecordReserva = $_GET['reservaid'];
}
mysql_select_db($database_ReservaSala, $ReservaSala);
$query_RecordReserva = sprintf("SELECT professor.professorID,        reserva.*,        professor.Nome,        reserva.reservaID FROM reserva.professor professor INNER JOIN reserva.reserva reserva           ON (professor.professorID = reserva.professor_professorID) WHERE (reserva.reservaID = %s)", GetSQLValueString($colname_RecordReserva, "text"),GetSQLValueString($colname_RecordReserva, "text"));
$query_limit_RecordReserva = sprintf("%s LIMIT %d, %d", $query_RecordReserva, $startRow_RecordReserva, $maxRows_RecordReserva);
$RecordReserva = mysql_query($query_limit_RecordReserva, $ReservaSala) or die(mysql_error());
$row_RecordReserva = mysql_fetch_assoc($RecordReserva);

if (isset($_GET['totalRows_RecordReserva'])) {
  $totalRows_RecordReserva = $_GET['totalRows_RecordReserva'];
} else {
  $all_RecordReserva = mysql_query($query_RecordReserva);
  $totalRows_RecordReserva = mysql_num_rows($all_RecordReserva);
}
$totalPages_RecordReserva = ceil($totalRows_RecordReserva/$maxRows_RecordReserva)-1;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<table border="1">
  <tr>
    <td>reservaID</td>
    <td>DataInicio</td>
    <td>DataFim</td>
    <td>professor_professorID</td>
    <td>turma_turmaID</td>
  </tr>
  <?php do { ?>
    <tr>
      <td><?php echo $row_RecordReserva['reservaID']; ?></td>
      <td><?php echo $row_RecordReserva['DataInicio']; ?></td>
      <td><?php echo $row_RecordReserva['DataFim']; ?></td>
      <td><?php echo $row_RecordReserva['professor_professorID']; ?></td>
      <td><?php echo $row_RecordReserva['turma_turmaID']; ?></td>
    </tr>
    <?php } while ($row_RecordReserva = mysql_fetch_assoc($RecordReserva)); ?>
</table>
</body>
</html>
<?php
mysql_free_result($RecordReserva);
?>


Abraço.

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

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.