【问题标题】:How can i turn this pl/sql into a procedure我怎样才能把这个pl/sql变成一个过程
【发布时间】:2020-06-23 09:10:28
【问题描述】:

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

它应该输出运行号、预订号、宠物名和任何相关的注释。

【问题讨论】:

  • Google 'Oracle CREATE PROCEDURE',有很多值得学习的地方。

标签: sql plsql procedure


【解决方案1】:

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

您还应该使用参数而不是&amp;logdate 所以例如日期类型的参数名称in_logdate

...
LV_DATE := in_logdate;
...

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    相关资源
    最近更新 更多