Как поставить 2 условия после AS в процедуре - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу поставить 2 условия после ключевого слова AS в процедуре, которые являются INVALID_BUDGET EXCEPTION и Event_ID varchar2 (8), но это приведет к ошибке в Oracle.

CREATE OR REPLACE PROCEDURE PRC_ADD_OVER_BUDGET_EVENT(V_EventType IN VARCHAR,V_EventBudget IN NUMBER,V_organizerID IN VARCHAR,v_FoodBeverage IN NUMBER,v_wine IN NUMBER ,v_Decoration IN NUMBER,v_rentalfee IN NUMBER,v_facility IN NUMBER) 

AS INVALID_BUDGET EXCEPTION AND Event_ID varchar2(8);

PRAGMA exception_init(INVALID_BUDGET,-20000);
BEGIN
    INSERT INTO Event values ( next_eventid_seq,v_eventType,v_eventbudget,null,null,null,v_organizerID) RETURNING EVENTid INTO event_ID;


    INSERT INTO EventCost values (next_Costid_seq,v_FoodBeverage,v_Wine,v_Decoration,v_RentalFee,v_Facility,event_ID);
    EXCEPTION WHEN INVALID_BUDGET THEN DBMS_OUTPUT.PUT_LINE(u'\000A' || 'Please enter budget of above 50000.');
End;
/

Как поместить два условия в процедуру без ошибок.

Дополнительный вопрос: может ли процедура обработать два обработчика исключений?

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Для множественной обработки исключений в Oracle вы можете использовать этот синтаксис.Блок обработки исключений содержит последовательность условий WHEN для обработки исключения.

BEGIN
<execution block>
.
.
EXCEPTION
WHEN <exceptionl_name>
THEN
  <Exception handling code for the “exception 1 _name’' >
WHEN OTHERS
THEN
  <Default exception handling code for all exceptions >
END;

Пожалуйста, обратитесь по ссылке

0 голосов
/ 06 апреля 2019

Определения переменных разделяются точкой с запятой:

CREATE OR REPLACE PROCEDURE PRC_ADD_OVER_BUDGET_EVENT
  (V_EventType IN VARCHAR,
   V_EventBudget IN NUMBER,
   V_organizerID IN VARCHAR,
   v_FoodBeverage IN NUMBER,
   v_wine IN NUMBER,
   v_Decoration IN NUMBER,
   v_rentalfee IN NUMBER,
   v_facility IN NUMBER) 
AS
  INVALID_BUDGET  EXCEPTION;
  Event_ID        varchar2(8);

  PRAGMA exception_init(INVALID_BUDGET,-20000);
BEGIN
  INSERT INTO Event
    values (next_eventid_seq, v_eventType, v_eventbudget,
            null, null, null, v_organizerID)
    RETURNING EVENTid INTO event_ID;

  INSERT INTO EventCost
    values (next_Costid_seq, v_FoodBeverage, v_Wine, v_Decoration,
            v_RentalFee, v_Facility, event_ID);
EXCEPTION
  WHEN INVALID_BUDGET THEN
    DBMS_OUTPUT.PUT_LINE(u'\000A' || 'Please enter budget of above 50000.');
  WHEN DUP_VAL_ON_INDEX THEN
    DBMS_OUTPUT.PUT_LINE(u'\000A' || 'Attempt to insert duplicate value ' ||
                         SQLERRM);
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(u'\000A' || 'Something bad happened! ' || SQLERRM);
End;

И вы можете добавить столько обработчиков исключений в свой блок исключений, сколько захотите.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...