The following lines contain the word 'select', 'insert', 'update' or 'delete':
SELECT 1
INTO l_num
FROM dual
WHERE EXISTS (SELECT 1
FROM mtl_safety_stocks
WHERE organization_id = p_organization_id
AND inventory_item_id = p_inventory_item_id
AND effectivity_date >= p_effect_date
AND (project_id IS NOT NULL OR task_id IS NOT NULL)
);
X_SELECTION NUMBER,
X_INVENTORY_ITEM_ID NUMBER,
X_SAFETY_STOCK_CODE NUMBER,
X_FORECAST_NAME VARCHAR2,
X_CATEGORY_SET_ID NUMBER,
X_CATEGORY_ID NUMBER,
X_PERCENT NUMBER,
X_SERVICE_LEVEL NUMBER,
X_START_DATE DATE,
login_id NUMBER,
user_id NUMBER) IS
cursor ITEM1_cur IS
--Bug#2713829, also selected MRP_SAFETY_STOCK_PERCENT from MSI.
SELECT DISTINCT F.INVENTORY_ITEM_ID, MSI.MRP_SAFETY_STOCK_PERCENT
FROM MRP_FORECAST_DESIGNATORS D, MRP_FORECAST_DATES F, MTL_SYSTEM_ITEMS MSI
WHERE D.ORGANIZATION_ID = X_ORGANIZATION_ID AND
D.FORECAST_DESIGNATOR = X_FORECAST_NAME AND
D.ORGANIZATION_ID = F.ORGANIZATION_ID AND
D.FORECAST_DESIGNATOR = F.FORECAST_DESIGNATOR AND
MSI.ORGANIZATION_ID = F.ORGANIZATION_ID AND
MSI.INVENTORY_ITEM_ID = F.INVENTORY_ITEM_ID;
SELECT DISTINCT F.INVENTORY_ITEM_ID
FROM MRP_FORECAST_DESIGNATORS D, MRP_FORECAST_DATES F,
MTL_ITEM_CATEGORIES C
WHERE D.ORGANIZATION_ID = X_ORGANIZATION_ID AND
D.FORECAST_DESIGNATOR = X_FORECAST_NAME AND
D.ORGANIZATION_ID = F.ORGANIZATION_ID AND
D.FORECAST_DESIGNATOR = F.FORECAST_DESIGNATOR AND
C.CATEGORY_SET_ID = X_CATEGORY_SET_ID AND
C.CATEGORY_ID = X_CATEGORY_ID AND
C.ORGANIZATION_ID = X_ORGANIZATION_ID AND
C.INVENTORY_ITEM_ID = F.INVENTORY_ITEM_ID;
SELECT 'X' FROM MRP_FORECAST_DESIGNATORS
WHERE FORECAST_DESIGNATOR = X_FORECAST_NAME AND
FORECAST_DESIGNATOR
IN (SELECT d.FORECAST_DESIGNATOR
FROM MRP_FORECAST_DESIGNATORS d
WHERE d.ORGANIZATION_ID = X_ORGANIZATION_ID AND
EXISTS (SELECT 'X' FROM MRP_FORECAST_DATES f
WHERE f.INVENTORY_ITEM_ID = X_INVENTORY_ITEM_ID AND
d.FORECAST_DESIGNATOR = f.FORECAST_DESIGNATOR AND
ORGANIZATION_ID = X_ORGANIZATION_ID));
IF (X_SELECTION = 1) THEN
DELETE FROM MTL_SAFETY_STOCKS M
WHERE ORGANIZATION_ID = X_ORGANIZATION_ID
AND FORECAST_DESIGNATOR = X_FORECAST_NAME
AND INVENTORY_ITEM_ID NOT IN ( SELECT DISTINCT F.INVENTORY_ITEM_ID
FROM MRP_FORECAST_DESIGNATORS D, MRP_FORECAST_DATES F
WHERE D.ORGANIZATION_ID = X_ORGANIZATION_ID
AND D.FORECAST_DESIGNATOR = X_FORECAST_NAME
AND D.ORGANIZATION_ID = F.ORGANIZATION_ID
AND D.FORECAST_DESIGNATOR = F.FORECAST_DESIGNATOR )
AND NOT EXISTS ( SELECT 1 FROM MTL_SAFETY_STOCKS
WHERE ORGANIZATION_ID = M.ORGANIZATION_ID
AND INVENTORY_ITEM_ID = M.INVENTORY_ITEM_ID
AND EFFECTIVITY_DATE >= X_START_DATE
AND (PROJECT_ID IS NOT NULL OR TASK_ID IS NOT NULL))
AND EFFECTIVITY_DATE >= X_START_DATE ;
ELSIF ( X_SELECTION = 2 ) THEN
DELETE FROM MTL_SAFETY_STOCKS M
WHERE ORGANIZATION_ID = X_ORGANIZATION_ID
AND FORECAST_DESIGNATOR = X_FORECAST_NAME
AND INVENTORY_ITEM_ID = X_INVENTORY_ITEM_ID
AND NOT EXISTS ( SELECT 1 FROM MRP_FORECAST_DESIGNATORS D, MRP_FORECAST_DATES F
WHERE D.ORGANIZATION_ID = X_ORGANIZATION_ID
AND D.FORECAST_DESIGNATOR = X_FORECAST_NAME
AND D.ORGANIZATION_ID = F.ORGANIZATION_ID
AND D.FORECAST_DESIGNATOR = F.FORECAST_DESIGNATOR
AND F.INVENTORY_ITEM_ID = X_INVENTORY_ITEM_ID )
AND NOT EXISTS ( SELECT 1 FROM MTL_SAFETY_STOCKS
WHERE ORGANIZATION_ID = M.ORGANIZATION_ID
AND INVENTORY_ITEM_ID = M.INVENTORY_ITEM_ID
AND EFFECTIVITY_DATE >= X_START_DATE
AND (PROJECT_ID IS NOT NULL OR TASK_ID IS NOT NULL))
AND EFFECTIVITY_DATE >= X_START_DATE ;
DELETE FROM MTL_SAFETY_STOCKS M
WHERE ORGANIZATION_ID = X_ORGANIZATION_ID
AND FORECAST_DESIGNATOR = X_FORECAST_NAME
AND EXISTS ( SELECT 1 FROM MTL_ITEM_CATEGORIES C
WHERE C.ORGANIZATION_ID = M.ORGANIZATION_ID
AND C.INVENTORY_ITEM_ID = M.INVENTORY_ITEM_ID
AND C.CATEGORY_SET_ID = X_CATEGORY_SET_ID
AND C.CATEGORY_ID = X_CATEGORY_ID
AND C.ORGANIZATION_ID = X_ORGANIZATION_ID )
AND INVENTORY_ITEM_ID NOT IN ( SELECT DISTINCT F.INVENTORY_ITEM_ID
FROM MRP_FORECAST_DESIGNATORS D, MRP_FORECAST_DATES F,
MTL_ITEM_CATEGORIES C
WHERE D.ORGANIZATION_ID = X_ORGANIZATION_ID
AND D.FORECAST_DESIGNATOR = X_FORECAST_NAME
AND D.ORGANIZATION_ID = F.ORGANIZATION_ID
AND D.FORECAST_DESIGNATOR = F.FORECAST_DESIGNATOR
AND C.CATEGORY_SET_ID = X_CATEGORY_SET_ID
AND C.CATEGORY_ID = X_CATEGORY_ID
AND C.ORGANIZATION_ID = X_ORGANIZATION_ID
AND C.INVENTORY_ITEM_ID = F.INVENTORY_ITEM_ID )
AND NOT EXISTS ( SELECT 1 FROM MTL_SAFETY_STOCKS
WHERE ORGANIZATION_ID = M.ORGANIZATION_ID
AND INVENTORY_ITEM_ID = M.INVENTORY_ITEM_ID
AND EFFECTIVITY_DATE >= X_START_DATE
AND (PROJECT_ID IS NOT NULL OR TASK_ID IS NOT NULL))
AND EFFECTIVITY_DATE >= X_START_DATE ;
IF X_SELECTION = 1 THEN
OPEN ITEM1_cur;
println('X_SELECTION = 1 ');
ELSIF X_SELECTION = 2 THEN
/******************************************************************/
/* Enhancement Bug #2231655 . Changed the logic to check for */
/* project and task entry for the combination of item,Organization*/
/* and effectivity date. If an entry exists for a project and task*/
/* then the processing of that item is skipped and a log message */
/* is written. */
/******************************************************************/
l_return_sts := check_project_task(p_inventory_item_id => x_inventory_item_id
,p_organization_id => x_organization_id
,p_effect_date => x_start_date
);
println('X_SELECTION = 2 ');
println('X_SELECTION <> 1 or 2 ');
/* Select calendar Code and Exception Set Id for future */
/* use so that the SQL statements do not have to join */
/* with MTL_PARAMETERS table. */
/********************************************************/
SELECT CALENDAR_CODE, CALENDAR_EXCEPTION_SET_ID
INTO cal_code, except_id
FROM MTL_PARAMETERS
WHERE ORGANIZATION_ID = org_id;
/* Select the the forecast quantity for each date. */
/********************************************************/
/* Bug# 5855934
* Modified the below cursor to prevent checks on Forecast Set as
* this value will never be passed through the 'forc_name' parameter.
* Removed the Nvl function as FORECAST_SET will never be 'NULL'.
* Removed the Decode function as FORECAST_DESIGNATOR will always refer
* to the Forecast Name and not the Forecast Set.
*/
CURSOR SelForecast_mad IS -- 6797274 changes
SELECT 1,
TO_NUMBER(TO_CHAR(C1.CALENDAR_DATE,'J')),
ROUND(SUM(NVL(F.FORECAST_MAD, 0)) * srv_factor, 5) -- 6797274 changes
FROM
BOM_CALENDAR_DATES C1,
MRP_FORECAST_DESIGNATORS D1,
MRP_FORECAST_DATES F
WHERE D1.ORGANIZATION_ID = org_id
AND D1.FORECAST_DESIGNATOR = forc_name
AND F.ORGANIZATION_ID = org_id
AND F.INVENTORY_ITEM_ID = item_id
AND F.FORECAST_DESIGNATOR = D1.FORECAST_DESIGNATOR
AND F.BUCKET_TYPE = 1
AND NVL(F.ORIGINATION_TYPE, -1) = 5 -- 6797274 changes
AND C1.CALENDAR_CODE = cal_code
AND C1.EXCEPTION_SET_ID = except_id
AND (C1.CALENDAR_DATE >= F.FORECAST_DATE
AND C1.CALENDAR_DATE >= effect_date
AND C1.CALENDAR_DATE <= NVL(F.RATE_END_DATE, F.FORECAST_DATE))
GROUP BY C1.CALENDAR_DATE
UNION
SELECT 2,
TO_NUMBER(TO_CHAR(C3.CALENDAR_DATE,'J')),
ROUND(SUM(NVL(F.FORECAST_MAD, 0)/(C2.NEXT_SEQ_NUM - -- 6797274 changes
C3.NEXT_SEQ_NUM)) * srv_factor, 5)
FROM BOM_CALENDAR_DATES C1, BOM_CALENDAR_DATES C2,
BOM_CALENDAR_DATES C3,
BOM_CAL_WEEK_START_DATES W1, MRP_FORECAST_DATES F,
MRP_FORECAST_DESIGNATORS D1
WHERE D1.ORGANIZATION_ID = org_id
AND D1.FORECAST_DESIGNATOR = forc_name
AND F.ORGANIZATION_ID = org_id
AND F.INVENTORY_ITEM_ID = item_id
AND F.FORECAST_DESIGNATOR = D1.FORECAST_DESIGNATOR
AND F.BUCKET_TYPE = 2
AND NVL(F.ORIGINATION_TYPE, -1) = 5 -- 6797274 changes
AND W1.CALENDAR_CODE = cal_code
AND W1.EXCEPTION_SET_ID = except_id
AND (W1.WEEK_START_DATE >= F.FORECAST_DATE
AND W1.WEEK_START_DATE <= NVL(F.RATE_END_DATE, F.FORECAST_DATE))
AND W1.NEXT_DATE > effect_date
AND C1.CALENDAR_CODE = cal_code
AND C2.CALENDAR_CODE = cal_code
AND C3.CALENDAR_CODE = cal_code
AND C1.EXCEPTION_SET_ID = except_id
AND C2.EXCEPTION_SET_ID = except_id
AND C3.EXCEPTION_SET_ID = except_id
AND C3.CALENDAR_DATE= W1.WEEK_START_DATE
AND C2.CALENDAR_DATE = W1.NEXT_DATE
AND (C1.CALENDAR_DATE >= C3.CALENDAR_DATE
AND C1.CALENDAR_DATE >= effect_date
AND C1.CALENDAR_DATE < C2.CALENDAR_DATE)
GROUP BY C3.CALENDAR_DATE
UNION
SELECT 3,
TO_NUMBER(TO_CHAR(C3.CALENDAR_DATE,'J')),
ROUND(SUM(NVL(F.FORECAST_MAD, 0)/(C2.NEXT_SEQ_NUM - -- 6797274 changes
C3.NEXT_SEQ_NUM)) * srv_factor, 5)
FROM BOM_CALENDAR_DATES C1, BOM_CALENDAR_DATES C2,
BOM_CALENDAR_DATES C3,
BOM_PERIOD_START_DATES W1, MRP_FORECAST_DATES F,
MRP_FORECAST_DESIGNATORS D1
WHERE D1.ORGANIZATION_ID = org_id
AND D1.FORECAST_DESIGNATOR = forc_name
AND F.ORGANIZATION_ID = org_id
AND F.INVENTORY_ITEM_ID = item_id
AND F.FORECAST_DESIGNATOR = D1.FORECAST_DESIGNATOR
AND F.BUCKET_TYPE = 3
AND NVL(F.ORIGINATION_TYPE, -1) = 5 -- 6797274 changes
AND W1.CALENDAR_CODE = cal_code
AND W1.EXCEPTION_SET_ID = except_id
AND (W1.PERIOD_START_DATE >= F.FORECAST_DATE
AND W1.PERIOD_START_DATE <= NVL(F.RATE_END_DATE, F.FORECAST_DATE))
AND W1.NEXT_DATE > effect_date
AND C1.CALENDAR_CODE = cal_code
AND C2.CALENDAR_CODE = cal_code
AND C3.CALENDAR_CODE = cal_code
AND C1.EXCEPTION_SET_ID = except_id
AND C2.EXCEPTION_SET_ID = except_id
AND C3.EXCEPTION_SET_ID = except_id
AND C3.CALENDAR_DATE= W1.PERIOD_START_DATE
AND C2.CALENDAR_DATE = W1.NEXT_DATE
AND (C1.CALENDAR_DATE >= C3.CALENDAR_DATE
AND C1.CALENDAR_DATE >= effect_date
AND C1.CALENDAR_DATE < C2.CALENDAR_DATE)
GROUP BY C3.CALENDAR_DATE
ORDER BY 2;
SELECT 1,
TO_NUMBER(TO_CHAR(C1.CALENDAR_DATE,'J')),
ROUND(SUM(F.ORIGINAL_FORECAST_QUANTITY)* ss_percent/100 , 5)
FROM
BOM_CALENDAR_DATES C1,
MRP_FORECAST_DESIGNATORS D1,
MRP_FORECAST_DATES F
WHERE D1.ORGANIZATION_ID = org_id
AND D1.FORECAST_DESIGNATOR = forc_name
AND F.ORGANIZATION_ID = org_id
AND F.INVENTORY_ITEM_ID = item_id
AND F.FORECAST_DESIGNATOR = D1.FORECAST_DESIGNATOR
AND F.BUCKET_TYPE = 1
AND C1.CALENDAR_CODE = cal_code
AND C1.EXCEPTION_SET_ID = except_id
AND (C1.CALENDAR_DATE >= F.FORECAST_DATE
AND C1.CALENDAR_DATE >= effect_date
AND C1.CALENDAR_DATE <= NVL(F.RATE_END_DATE, F.FORECAST_DATE))
GROUP BY C1.CALENDAR_DATE
UNION
SELECT 2,
TO_NUMBER(TO_CHAR(C1.CALENDAR_DATE,'J')),
ROUND(SUM(ORIGINAL_FORECAST_QUANTITY/
(C2.NEXT_SEQ_NUM - C3.NEXT_SEQ_NUM))* ss_percent/100 ,5)
FROM BOM_CALENDAR_DATES C1, BOM_CALENDAR_DATES C2,
BOM_CALENDAR_DATES C3,
BOM_CAL_WEEK_START_DATES W1, MRP_FORECAST_DATES F,
MRP_FORECAST_DESIGNATORS D1
WHERE D1.ORGANIZATION_ID = org_id
AND D1.FORECAST_DESIGNATOR = forc_name
AND F.ORGANIZATION_ID = org_id
AND F.INVENTORY_ITEM_ID = item_id
AND F.FORECAST_DESIGNATOR = D1.FORECAST_DESIGNATOR
AND F.BUCKET_TYPE = 2
AND W1.CALENDAR_CODE = cal_code
AND W1.EXCEPTION_SET_ID = except_id
AND (W1.WEEK_START_DATE >= F.FORECAST_DATE
AND W1.WEEK_START_DATE <= NVL(F.RATE_END_DATE, F.FORECAST_DATE))
AND W1.NEXT_DATE > effect_date
AND C1.CALENDAR_CODE = cal_code
AND C2.CALENDAR_CODE = cal_code
AND C3.CALENDAR_CODE = cal_code
AND C1.EXCEPTION_SET_ID = except_id
AND C2.EXCEPTION_SET_ID = except_id
AND C3.EXCEPTION_SET_ID = except_id
AND C3.CALENDAR_DATE= W1.WEEK_START_DATE
AND C2.CALENDAR_DATE = W1.NEXT_DATE
AND (C1.CALENDAR_DATE >= C3.CALENDAR_DATE
AND C1.CALENDAR_DATE >= effect_date
AND C1.CALENDAR_DATE < C2.CALENDAR_DATE)
GROUP BY C1.CALENDAR_DATE
UNION
SELECT 3,
TO_NUMBER(TO_CHAR(C1.CALENDAR_DATE,'J')),
ROUND(SUM(ORIGINAL_FORECAST_QUANTITY/
(C2.NEXT_SEQ_NUM - C3.NEXT_SEQ_NUM))* ss_percent/100 ,5)
FROM BOM_CALENDAR_DATES C1, BOM_CALENDAR_DATES C2,
BOM_CALENDAR_DATES C3,
BOM_PERIOD_START_DATES W1, MRP_FORECAST_DATES F,
MRP_FORECAST_DESIGNATORS D1
WHERE D1.ORGANIZATION_ID = org_id
AND D1.FORECAST_DESIGNATOR = forc_name
AND F.ORGANIZATION_ID = org_id
AND F.INVENTORY_ITEM_ID = item_id
AND F.FORECAST_DESIGNATOR = D1.FORECAST_DESIGNATOR
AND F.BUCKET_TYPE = 3
AND W1.CALENDAR_CODE = cal_code
AND W1.EXCEPTION_SET_ID = except_id
AND (W1.PERIOD_START_DATE >= F.FORECAST_DATE
AND W1.PERIOD_START_DATE <= NVL(F.RATE_END_DATE, F.FORECAST_DATE))
AND W1.NEXT_DATE > effect_date
AND C1.CALENDAR_CODE = cal_code
AND C2.CALENDAR_CODE = cal_code
AND C3.CALENDAR_CODE = cal_code
AND C1.EXCEPTION_SET_ID = except_id
AND C2.EXCEPTION_SET_ID = except_id
AND C3.EXCEPTION_SET_ID = except_id
AND C3.CALENDAR_DATE= W1.PERIOD_START_DATE
AND C2.CALENDAR_DATE = W1.NEXT_DATE
AND (C1.CALENDAR_DATE >= C3.CALENDAR_DATE
AND C1.CALENDAR_DATE >= effect_date
AND C1.CALENDAR_DATE < C2.CALENDAR_DATE)
GROUP BY C1.CALENDAR_DATE
ORDER BY 2; -- 6797274 Changes End
SELECT BUCKET_TYPE
FROM MRP_FORECAST_DESIGNATORS
WHERE FORECAST_DESIGNATOR = cp_forecast;
SELECT SAFETY_STOCK_QUANTITY
FROM MTL_SAFETY_STOCKS
WHERE ORGANIZATION_ID = org_id
AND INVENTORY_ITEM_ID = item_id
AND EFFECTIVITY_DATE = (
SELECT MAX(EFFECTIVITY_DATE)
FROM MTL_SAFETY_STOCKS
WHERE ORGANIZATION_ID = org_id
AND INVENTORY_ITEM_ID = item_id
AND EFFECTIVITY_DATE < effect_date);
/* Select calendar Code and Exception Set Id for future */
/* use so that the SQL statements do not have to join */
/* with MTL_PARAMETERS table. */
/********************************************************/
SELECT TO_NUMBER(TO_CHAR(effect_date, 'J'))
INTO j_effect_date
FROM DUAL;
/* Delete all the records since the effect_date, and */
/* prepare to reload them. */
/********************************************************/
DELETE FROM MTL_SAFETY_STOCKS
WHERE ORGANIZATION_ID = org_id
AND INVENTORY_ITEM_ID = item_id
AND EFFECTIVITY_DATE >= effect_date;
/* The following opens the cursor and select the */
/* forecast results into the variables. */
/* If there is no row selected, it implies that there */
/* is no forecast qty. In this case, the user */
/* exit will insert one row into the MTL_SAFETY_STOCKS */
/* table (ie, qty = 0 and effectivety_date). */
/********************************************************/
/********************************************************/
/* In contrast to the pro_sdate and pro_sqty, pro_fdate */
/* and pro_fqty are defined as the processing forecast */
/* qty and date respetively. The forecast qty and date */
/* are selected from the MRP_FORECAST_DATES. */
/* Initialize the pro_fdate and pro_fqty. */
/* pro_fdate <- effect_date */
/* pro_fqty <- 0 */
/* */
/* The following variables are notable. */
/* ss_date: safety stock dates. */
/* ss_qty: safety stock qty. */
/********************************************************/
-- start Bug # 5718937
l_mad_calc := FALSE;
Insert_Safety_Stocks(org_id, item_id, ss_code, forc_name,
ss_percent, srv_level, to_date(forc_date,'J'), forc_qty,
login_id, user_id);
Insert_Safety_Stocks(org_id, item_id, ss_code, forc_name,
ss_percent, srv_level, to_date(ss_date,'J'), ss_qty,
login_id, user_id);
Insert_Safety_Stocks(org_id, item_id, ss_code, forc_name,
ss_percent, srv_level, to_date(ss_date,'J'), ss_qty,
login_id, user_id);
/* Test and insert the last one which has the forecast */
/* qty and date, if necessary. */
/********************************************************/
-- 6797274 changes for below if condition
if (ss_code <> 3 and SelForecast_userper%ROWCOUNT > 0) or (ss_code = 3 and SelForecast_mad%ROWCOUNT > 0 AND (NOT l_mad_calc )) then /* at least one row selected */ -- Modified for Bug # 5718937
if(pro_fdate <> pro_sdate or
pro_fqty <> pro_sqty) then
if pro_fdate <> pro_sdate then
ss_date := pro_sdate;
Insert_Safety_Stocks(org_id, item_id, ss_code, forc_name,
ss_percent, srv_level, to_date(ss_date,'J'), ss_qty,
login_id, user_id);
Insert_Safety_Stocks(org_id, item_id, ss_code, forc_name,
ss_percent, srv_level, to_date(ss_date,'J'), ss_qty,
login_id, user_id);
/* Insert the very last one whose qty is 0 and date is */
/* the next day of the last day which has forecast qty. */
/********************************************************/
ss_date := pro_sdate;
Insert_Safety_Stocks(org_id, item_id, ss_code, forc_name,
ss_percent, srv_level, to_date(ss_date,'J'), ss_qty,
login_id, user_id);
/* Build a dynamic SQL to insert into the MTL_SAFETY_ */
/* STOCKS table. */
/* ss_code = 1 :User-defined quantity */
/* = 2 :User-defined percentage */
/* = 3 :Mean absolute deviation (MAD) */
/********************************************************/
procedure Insert_Safety_Stocks (org_id NUMBER,
item_id NUMBER,
ss_code NUMBER,
forc_name VARCHAR2,
ss_percent NUMBER,
srv_level NUMBER,
ss_date DATE,
ss_qty NUMBER,
login_id NUMBER,
user_id NUMBER) IS
BEGIN
INSERT INTO MTL_SAFETY_STOCKS(
EFFECTIVITY_DATE,SAFETY_STOCK_QUANTITY,
SAFETY_STOCK_PERCENT, LAST_UPDATE_DATE,
SERVICE_LEVEL, CREATION_DATE, LAST_UPDATED_BY,
CREATED_BY, LAST_UPDATE_LOGIN, ORGANIZATION_ID,
INVENTORY_ITEM_ID, SAFETY_STOCK_CODE,
FORECAST_DESIGNATOR)
VALUES(
ss_date, ss_qty,
ss_percent, SYSDATE,
srv_level, SYSDATE, user_id,
user_id, login_id,
org_id, item_id, ss_code, forc_name);
END Insert_Safety_Stocks;