Создание процедуры с Oracle - PullRequest
0 голосов
/ 29 ноября 2018

я пытаюсь получить работу (ORACLE SHEDULER) в оракуле каждую неделю.

Смысл в том, чтобы каждую неделю просматривать таблицу Historico и проверять каждую ID_Academista, связанную сТаблица «Академиста».После этого он должен сравнить «Valor_Atual», чтобы увидеть, если его> 20 (это происходит из таблицы 'Tecnologia')

Если это так, он уменьшается на 1, если нет, то остается прежним.

Чтобы выразить это лучше на английском: «Tecnologia» - это технология, каждая технология имеет индивидуальную оценку (Valor_Atual), которая будет в «Academista» (студент)

Таблица Historico База данных

Вот код:

 CREATE OR REPLACE PROCEDURE notas
  IS
    contar INTEGER := 0;
    contar2 INTEGER;

BEGIN

  SELECT COUNT(*) INTO contar2 FROM Academista;

  WHILE contar <= contar2 
    LOOP

    SELECT  h.Valor_Atual, h.Valor_Antigo, h.Id_academista FROM  HISTORICO h
  WHERE  h.Id_academista = contar ;


       IF 
           h.Valor_Atual > 20
    THEN
          UPDATE HISTORICO 
             SET Valor_Atual = Valor_Atual + 1
              WHERE h.Id_academista = contar;

          ELSE
              UPDATE HISTORICO 
                SET Valor_Atual = Valor_Atual - 1
                  WHERE h.Id_academista = contar ;   

                  SET contar := contar + 1;

           END IF;   

    END LOOP; 

END;

Ошибки

1 Ответ

0 голосов
/ 29 ноября 2018

Вы не можете использовать селекторы внутри блока pl / sql без переменной.

CREATE OR REPLACE PROCEDURE notas
  IS
    contar INTEGER := 0;
    contar2 INTEGER;

    h_var HISTORICO%rowtype;

BEGIN

  SELECT COUNT(*) INTO contar2 FROM Academista;

  WHILE contar <= contar2 
    LOOP

    SELECT  h.* into h_var FROM  HISTORICO h
  WHERE  h.Id_academista = contar ;


       IF 
           h_var.Valor_Atual > 20
    THEN
          UPDATE HISTORICO 
             SET Valor_Atual = Valor_Atual + 1
              WHERE h_var.Id_academista = contar;

          ELSE
              UPDATE HISTORICO 
                SET Valor_Atual = Valor_Atual - 1
                  WHERE h_var.Id_academista = contar ;   

                  SET contar := contar + 1;

           END IF;   

    END LOOP; 

END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...