2017-03-05 6 views
-2

Oracle 10g Express Edition을 사용하고 있습니다. 여기에 지금오라클의 함수 본문으로 인해 컴파일시 오류가 발생한 패키지 본문

CREATE OR REPLACE PACKAGE ticketBooking 
    AS 
     PROCEDURE bookOrder(id IN NUMBER, key IN VARCHAR2, fname IN VARCHAR2, lname IN VARCHAR2, age IN NUMBER, address IN VARCHAR2, adate IN VARCHAR2, status OUT NUMBER); 
     PROCEDURE bookTicket(id IN NUMBER, orderID IN NUMBER, mID IN NUMBER, mRow IN NUMBER, mSeat IN NUMBER, mDate IN VARCHAR2, mTime IN NUMBER, status OUT NUMBER); 
     FUNCTION maxOrderID RETURN NUMBER; 
     FUNCTION maxTransactionID RETURN NUMBER; 
    END ticketBooking; 
/

패키지 본체의 창조 : - - :

여기 내 패키지 생성 코드입니다

CREATE OR REPLACE PACKAGE BODY ticketBooking 
    IS 
     PROCEDURE 
     bookOrder (id IN NUMBER, key IN VARCHAR2, fname IN VARCHAR2, lname IN VARCHAR2, age IN NUMBER, address IN VARCHAR2, adate IN VARCHAR2, status OUT NUMBER) 
     IS 
      BEGIN 
      INSERT INTO tbl_order (order_id, order_key, order_fname, order_lname, order_age, order_address, order_add_date) 
      VALUES (id, key, fname, lname, age, address, TO_DATE(adate, 'YYYY-MM-DD hh24:mi:ss')); 
      status := 1; 
      EXCEPTION 
      WHEN OTHERS THEN 
      status := 0; 
      END bookOrder; 

     PROCEDURE 
     bookTicket (id IN NUMBER, orderID IN NUMBER, mID IN NUMBER, mRow IN NUMBER, mSeat IN NUMBER, mDate IN VARCHAR2, mTime IN NUMBER, status OUT NUMBER) 
     IS 
      BEGIN 
      INSERT INTO tbl_transaction (transaction_id, order_id, movie_id, movie_row, movie_seat, movie_date, movie_time) 
      VALUES (id, orderID, mID, mRow, mSeat, mDate, mTime); 
      status := 1; 
      EXCEPTION 
      WHEN OTHERS THEN 
      status := 0; 
      END bookTicket; 

     FUNCTION 
     maxOrderID RETURN NUMBER 
     IS 
      mOID NUMBER:=0; 
      BEGIN 
      SELECT CASE WHEN MAX(order_id) > 0 THEN MAX(order_id) ELSE 0 END INTO mOID FROM tbl_order; 
      return (mOID); 
      END maxOrderID; 

     FUNCTION 
     maxTransactionID RETURN NUMBER 
     IS 
      mTID NUMBER:=0; 
      BEGIN 
      SELECT CASE WHEN MAX(transaction_id) > 0 THEN MAX(transaction_id) ELSE 0 END INTO mTID FROM tbl_transaction; 
      return (mTID); 
      END maxTransactionID; 

    END ticketBooking; 
/

나는 패키지 바디 컴파일 오류와 함께 만든 오류를 얻고있다. 내가 뭘 잘못하고 있니? 함수를 제거 할 때 경고 또는 컴파일 오류가 표시되지 않습니다.

+3

또는'user_errors' 뷰를 쿼리, 당신이 볼 수있는 실제 컴파일 오류 아르. –

답변

1

당신이 누락 : 기능의

  • return 절을. if

return number

  • thenend if를 추가하는 것은이 시도 : 당신은`쇼 errors`을 할 경우

    create or replace PACKAGE BODY ticketBooking 
        IS 
         PROCEDURE 
         bookOrder (id IN NUMBER, key IN VARCHAR2, fname IN VARCHAR2, lname IN VARCHAR2, age IN NUMBER, address IN VARCHAR2, adate IN VARCHAR2, status OUT NUMBER) 
         IS 
          BEGIN 
          INSERT INTO tbl_order (order_id, order_key, order_fname, order_lname, order_age, order_address, order_add_date) 
          VALUES (id, key, fname, lname, age, address, TO_DATE(adate, 'YYYY-MM-DD hh24:mi:ss')); 
          status := 1; 
          EXCEPTION 
          WHEN OTHERS THEN 
          status := 0; 
          END bookOrder; 
    
         PROCEDURE 
         bookTicket (id IN NUMBER, orderID IN NUMBER, mID IN NUMBER, mRow IN NUMBER, mSeat IN NUMBER, mDate IN VARCHAR2, mTime IN NUMBER, status OUT NUMBER) 
         IS 
          BEGIN 
          INSERT INTO tbl_transaction (transaction_id, order_id, movie_id, movie_row, movie_seat, movie_date, movie_time) 
          VALUES (id, orderID, mID, mRow, mSeat, mDate, mTime); 
          status := 1; 
          EXCEPTION 
          WHEN OTHERS THEN 
          status := 0; 
          END bookTicket; 
    
         FUNCTION 
         maxOrderID return number 
         IS 
          mOID NUMBER:=0; 
          dReturn NUMBER:=0; 
          BEGIN 
          SELECT MAX(order_id) INTO mOID FROM tbl_order; 
          if(mOID > 0) then 
           return (mOID); 
          else 
           return (dReturn); 
           end if; 
          END maxOrderID; 
    
         FUNCTION 
         maxTransactionID return number 
         IS 
          mTID NUMBER:=0; 
          dReturn NUMBER:=0; 
          BEGIN 
          SELECT MAX(transaction_id) INTO mTID FROM tbl_transaction; 
          if(mTID > 0) then 
           return (mTID); 
          else 
           return (dReturn); 
           end if; 
          END maxTransactionID; 
    
        END ticketBooking; 
    
  • +0

    내 질문을 편집했습니다. 좀 도와 줄 수있어? – Saswat

    +1

    @Saswat, 편집 오류가 무엇인지 알려 주어야합니다. 화면이 보이지 않습니다. –