在程序中如何将2个条件置于AS之后

时间:2019-04-06 02:00:17

标签: oracle

我想在过程中的关键字AS后面放置2个条件,分别是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 个答案:

答案 0 :(得分:0)

对于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;

Please refer the link

答案 1 :(得分:0)

变量定义用分号分隔:

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;

您可以根据需要向异常块中添加任意数量的异常处理程序。

好运。