मैं केवल एक प्रक्रिया का उपयोग करके EVENT तालिका और EventCost तालिका में मान सम्मिलित करना चाहता हूं।

घटना का PK EventID है और यह EventCost तालिका का FK है। मैंने EventID के लिए SCOPE_IDENTITY() का उपयोग करने का प्रयास किया लेकिन फिर भी प्रक्रिया बनाने में विफल रहा।

2) क्या मुझे हेडर में दो बार के लिए v_EventID घोषित करने की आवश्यकता है? (एक इवेंट टेबल के लिए, एक इवेंट कॉस्ट टेबल के लिए)

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

AS
BEGIN

INSERT INTO Event 
values 
(next_eventid_seq,null,v_eventbudget,null,null,null,v_organizerID)


INSERT INTO EventCost 
values 
(next_Costid_seq,v_FoodBeverage,v_Wine,v_Decoration,v_RentalFee,v_Facility,SCOPE_IDENTITY())

End;
/
0
10IEI 6 अप्रैल 2019, 00:25

1 उत्तर

सबसे बढ़िया उत्तर

returning into क्लॉज का इस्तेमाल करें:

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

AS
  event_ID varchar2(64);
BEGIN

INSERT INTO Event 
values 
(next_eventid_seq,null,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);

End;
/

पी.एस. इसके अलावा कुछ नोट:

  1. varchar के बजाय varchar2 डेटाटाइप का प्रयोग करें।
  2. सम्मिलित करते समय, आपके द्वारा सम्मिलित किए गए कॉलम के नाम प्रदान करें: insert into Event (col1, col2, col3, ...)। यदि आपकी तालिका संरचना बदल जाती है, तो सम्मिलित विवरण अभी भी काम करेगा।
1
Pavel Smirnov 5 अप्रैल 2019, 21:43