我如何将这个pl / sql转换为过程

问题描述 投票:0回答:1

我必须为分配写此查询。所以我们有一个数据库,我们正在从数据库中提取信息,这最终将与某些后端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;

它应该输出行程编号,预订编号,宠物名称和任何相关注释。

sql plsql procedure
1个回答
0
投票

您可以将DECLARE替换为CREATE OR REPLACE PROCEDURE my_proc(in_logdate in date) IS。在这种情况下,my_proc将是您的过程的名称。

您还应该使用参数代替&logdate所以日期类型的参数名称in_logdate

...
LV_DATE := in_logdate;
...
© www.soinside.com 2019 - 2024. All rights reserved.