как использовать одну процедуру для вставки в две таблицы - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу вставить значение в таблицу EVENT и таблицу EventCost, используя только одну процедуру.

PK события - EventID, и это таблица FK из EventCost. Я пытался использовать SCOPE_IDENTITY() для EventID, но все еще не смог создать процедуру.

2) Нужно ли объявлять v_EventID в заголовке два раза? (Один для таблицы Event, другой для таблицы eventCost)

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;
/

1 Ответ

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

Использовать 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;
/

P.S. Также несколько заметок:

  1. Используйте varchar2 тип данных вместо varchar.
  2. При вставке укажите имена столбцов, в которые вы вставляете: insert into Event (col1, col2, col3, ...). В случае изменения структуры таблицы операторы вставки будут работать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...