簡體   English   中英

我怎樣才能把這個 pl/sql 變成一個過程

[英]How can i turn this pl/sql into a procedure

我不得不為一個作業編寫這個查詢。 所以我們有一個數據庫,我們正在從中提取信息,這最終將與某些后端 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;

它應該輸出運行號、預訂號、寵物名稱和任何相關注釋。

您可以將DECLARE替換為CREATE OR REPLACE PROCEDURE my_proc(in_logdate in date) IS 在這種情況下, my_proc將是您的過程的名稱。

您還應該使用參數而不是&logdate所以例如參數名稱in_logdate類型日期

...
LV_DATE := in_logdate;
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM