Как я могу превратить этот PL / sql в процедуру - PullRequest
0 голосов
/ 11 марта 2020

Я должен был написать этот запрос для назначения. Итак, у нас есть база данных, и мы извлекаем из нее информацию, в конечном итоге это сработает с некоторой серверной частью c# Есть ли что-нибудь, что я могу сделать, зная, что я собираюсь использовать это снова, чтобы сделать его лучше и более адаптируемым, когда придет день, когда мне придется все это подключить.

set serveroutput on

DECLARE

  LV_DATE HVK_RESERVATION.RESERVATION_START_DATE%TYPE;
  LV_SERV VARCHAR(100);

  CURSOR LCUR_RES IS
    SELECT *
      FROM HVK_RESERVATION R
     INNER JOIN HVK_PET_RESERVATION PR
        ON R.RESERVATION_NUMBER = PR.RES_RESERVATION_NUMBER
     INNER JOIN HVK_PET P
        ON P.PET_NUMBER = PR.PET_PET_NUMBER
     INNER JOIN HVK_OWNER OW
        ON OW.OWNER_NUMBER = P.OWN_OWNER_NUMBER

     WHERE R.RESERVATION_START_DATE < LV_DATE
       AND R.RESERVATION_END_DATE > LV_DATE;

  CURSOR LCUR_SERVICE(PET_RES_NUM NUMBER) IS
    SELECT *
      FROM HVK_SERVICE S
     INNER JOIN HVK_PET_RESERVATION_SERVICE PRS
        ON PRS.SERV_SERVICE_NUMBER = S.SERVICE_NUMBER
       AND PRS.PR_PET_RES_NUMBER = PET_RES_NUM;

BEGIN
  LV_DATE := TO_DATE('&logdate', 'yy-mm-dd');
  DBMS_OUTPUT.PUT_LINE('Kennel log for ' || '' || LV_DATE);
  DBMS_OUTPUT.PUT_LINE('-------------------------------');

  FOR I IN LCUR_RES LOOP

    DBMS_OUTPUT.PUT_LINE('Run:' || '' || I.RUN_RUN_NUMBER || '    ' ||
                         'Pet: ' || '' || I.PET_NAME || ' ' ||
                         I.OWNER_LAST_NAME || ' Pet Reservation: ' || '' ||
                         I.PET_RES_NUMBER);
    DBMS_OUTPUT.PUT_LINE('Reservation start/end ' || ' ' ||
                         I.RESERVATION_START_DATE || '  ' ||
                         I.RESERVATION_END_DATE);
    DBMS_OUTPUT.PUT('Services : ');
    FOR X IN LCUR_SERVICE(I.PET_RES_NUMBER) LOOP
      DBMS_OUTPUT.PUT(X.SERVICE_DESCRIPTION || ' ');

    END LOOP;
    DBMS_OUTPUT.PUT_LINE('');
    FOR LREC_LOG IN (SELECT *
                       FROM HVK_KENNEL_LOG KL
                      WHERE KL.PR_PET_RES_NUMBER = I.PET_RES_NUMBER

                     ) LOOP
      DBMS_OUTPUT.PUT_LINE('Notes: ' || '' ||
                           LREC_LOG.KENNEL_LOG_SEQUENCE_NUMBER || ' ' ||
                           'Log Note: ' || '' || LREC_LOG.KENNEL_LOG_NOTES);
    END LOOP;
    DBMS_OUTPUT.PUT_LINE(' ');
  END LOOP;

END;

Это должно вывести номер прогона, номер бронирования, имя питомца и любые соответствующие примечания.

1 Ответ

0 голосов
/ 11 марта 2020

вы можете заменить DECLARE на CREATE OR REPLACE PROCEDURE my_proc(in_logdate in date) IS. в этом случае my_proc будет именем вашей процедуры.

вы должны также использовать параметр вместо &logdate, например, имя параметра in_logdate типа date

...
LV_DATE := in_logdate;
...
...