В настоящее время у нас есть проблема с процедурой.Поправка к процедуре, позволяющая дифференцировать возвращаемое значение, определенное для того, является ли тип машины «ROAD TRAILER» или «ROAD WAGON».
Представление, которое имеет эти значения и знает, что мы можем использовать ' MCH_CODE ', чтобы создать связь между ACTIVE_WORK_ORDER_TAB и EQUIPMENT_FUNCTIONAL_UIV.
Таблицы, которые я считаю необходимыми (некоторые в настоящее время используются)
- EQUIPMENT_FUNCTIONAL_UIV (требуется для MCH_TYи присоединяется к VIA MCH_CODE к ACTIVE_WORK_ORDER_TAB
- ACTIVE_WORK_ORDER_TAB
По сути, это то, как это должно читаться, однако мне трудно обновлять процедуру каждый разраз я исправил утверждение, которое он нарушил.
Если MCH_TYPE равен ROAD_WAGON или ROAD_TRAILER и TEMP_ in ('682', '720', '770', '775', '784'), затем вернитесь14
В противном случае MCH_TYPE НЕ является 'ROAD_WAGON' или 'ROAD_TRAILER' и TEMP_ in ('720'), а затем возвращает 14
Пример процедуры ниже:
temp_ NUMBER;
serv_ VARCHAR2(100);
attr_ VARCHAR2(2000);
info_ VARCHAR2(2000);
WO_STATUS_ID_ VARCHAR2(200);
Record_Found_ BOOLEAN;
contract_ VARCHAR2(200);
Pre_Accounting_id_ NUMBER;
LoopCount_ NUMBER;
CURSOR get_preacc IS
SELECT *
FROM PRE_ACCOUNTING
WHERE pre_accounting_id = Pre_Accounting_id_ ;
CURSOR get_rec IS
SELECT WO_STATUS_ID,contract
FROM ACTIVE_WORK_ORDER_TAB
WHERE PRE_ACCOUNTING_ID = Pre_Accounting_id_;
BEGIN
Pre_Accounting_Id_ := Client_sys.Get_Item_Value('PRE_ACCOUNTING_ID', Pre_Accounting_Attr_);
Record_Found_ := FALSE;
FOR c_get_rec IN get_rec LOOP
Record_Found_ := TRUE;
WO_STATUS_ID_ := c_get_rec.wo_status_id;
contract_ := c_get_rec.contract;
END LOOP;
IF NVL(WO_STATUS_ID_,'XXX1') NOT IN ('RELEASED','STARTED','FAULTREPORT', 'WORKREQUEST') THEN
RETURN;
END IF;
LoopCount_ := 0;
<<IF_ERROR_LOOP>>
BEGIN
FOR x_ IN get_preacc LOOP
BEGIN
temp_ := to_number(x_.codeno_b);
EXCEPTION
WHEN OTHERS then
temp_ := 0;
END;
IF temp_ >= 450 and temp_ <= 470 THEN
serv_ := '12';
ELSIF temp_ = 682 or temp_ = 720 or temp_ = 770 or temp_ = 775 or temp_ = 784 THEN
serv_ := '14';
ELSIF temp_ = 950 THEN
serv_ := '12';
ELSIF temp_ = 685 THEN
serv_ := '22';
ELSE
serv_ := '16';
END IF;
IF nvl(x_.CODENO_C,'X') = serv_ THEN
RETURN;
END IF;
Client_SYS.clear_Attr(attr_);
Client_SYS.Add_To_Attr('CODENO_C', serv_,attr_);
Client_SYS.Add_To_Attr('COMPANY', Site_API.Get_Company(contract_),attr_);
Client_SYS.Add_To_Attr('CONTRACT', contract_,attr_);
PRE_ACCOUNTING_API.Modify__(info_,x_.objid,x_.objversion,attr_,'DO');
END LOOP;
EXCEPTION
WHEN OTHERS THEN
LoopCount_ := LoopCount_ +1;
IF LoopCount_ < 20 THEN
DBMS_LOCK.SLEEP (20);
GOTO IF_ERROR_LOOP;
END IF;
END;