Почему эта процедура не возвращает значения? - PullRequest
0 голосов
/ 06 января 2019

Вот мой код:

SET SERVEROUTPUT ON;

CREATE OR REPLACE PROCEDURE fillHist_station
AS
    *--filling the cursor*
    CURSOR cur_newTab IS(
        SELECT s.NUM_STATION, extract (year from r.DATER), cl.NB_RESERV, SUM(p.MONTANT)
        FROM STATION s, HOTEL h, CHAMBRE c, RESERVATION r, CLIENTS cl, PAYEMENT p 
        WHERE s.NUM_STATION=h.NUM_STATION and h.NUM_HOTEL=c.NUM_HOTEL and c.IDCHAMBRE=r.IDCHAMBRE and r.NUMC=cl.NUMC and cl.NUMC=p.NUMC
        GROUP BY s.NUM_STATION, extract (year from r.DATER), cl.NB_RESERV);
                    V_numStation STATION.NUM_STATION%TYPE;
                    V_anne VARCHAR2(4);
                    V_nbreserve CLIENTS.NB_RESERV%TYPE;
                    V_revenu NUMBER(5);
                BEGIN
                    OPEN cur_newTab;
                    LOOP
*--fetching the values from the cursor in my variables*
                        FETCH cur_newTab INTO V_numStation, V_anne, V_nbreserve, V_revenu;
                                DBMS_OUTPUT.PUT_LINE(V_numStation||' '||V_anne||' '||V_nbreserve||' '||V_revenu);
                        EXIT WHEN cur_newTab%notfound;
*--inserting the values of the variables in a new table that i just created*
                        INSERT INTO HIST_STATION ("NUM_STATION","ANNEE","NB_RESERV","REVENU") VALUES(V_numStation,V_anne,V_nbreserve,V_revenu);
*--showing the values of the variables in the dbms output to see my results*
                        DBMS_OUTPUT.PUT_LINE(V_numStation||' '||V_anne||' '||V_nbreserve||' '||V_revenu);
                    END LOOP;
                    CLOSE cur_newTab;
                END fillHist_station;
                /
                SHOW ERRORS;

И ошибок не обнаружено. Вот вывод сценария:

    Procedure FILLHIST_STATION compiled

        No errors.

Единственная проблема в том, что в моем выводе dbms я не получаю никаких результатов и новая таблица все еще пуста.

и вот что должно появиться:

2   2018    6   1400
2   2017    1   2800
2   2018    3   8800
5   2018    2   1000
5   2018    1   950
3   2019    1   2800
2   2019    6   1400
2   2018    5   1550
3   2018    5   1550
3   2018    1   2800
1   2018    4   2300
5   2018    4   1300

1 Ответ

0 голосов
/ 06 января 2019

Я надеюсь, что вам нужно переместить переменную (V_ *) в раздел Declare.

Попробуйте сначала напечатать значения из записи курсора, чтобы убедиться, что курсор работает нормально.

SET SERVEROUTPUT ON;

CREATE OR REPLACE PROCEDURE fillHist_station
AS
*--filling the cursor*
CURSOR cur_newTab IS(
    SELECT s.NUM_STATION,extract (year from r.DATER),cl.NB_RESERV,SUM(p.MONTANT)
       FROM STATION s, HOTEL h, CHAMBRE c, RESERVATION r, CLIENTS cl, PAYEMENT p 
       WHERE s.NUM_STATION=h.NUM_STATION and h.NUM_HOTEL=c.NUM_HOTEL and c.IDCHAMBRE=r.IDCHAMBRE and r.NUMC=cl.NUMC and cl.NUMC=p.NUMC
       GROUP BY s.NUM_STATION, extract (year from r.DATER), cl.NB_RESERV);
BEGIN
  FOR cur_newTab_rec  IN cur_newTab
  LOOP
    DBMS_OUTPUT.PUT_LINE(cur_newTab_rec.NUM_STATION);
  END LOOP;
CLOSE cur_newTab;
END fillHist_station;
/
SHOW ERRORS;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...