2016-03-03 105 views
0

時有什麼不對下面的步驟我收到以下錯誤PLS-00103:出現符號 「(」 期待

LINE/COL ERROR


1/107? PLS-00103:出現符號 「(」 期待的 的 下列之一時: :=),@%默認字符 符號 「:=」 代替 「(」 繼續

1/114 PLS-00103:出現符號 「IS」 期待的 的 一個以下時: 回報

CREATE OR REPLACE FUNCTION MOBLIE_RX_VERIFICATION(ARG_DAD_ID IN NUMBER,ARG_PATIENT_NAME IN VARCHAR2,ARG_VERIFY_MODE VARCHAR2(15)) AS 

DECLARE 

NEW_CCH_ID NUMBER; 
CCH_COUNT NUMBER; 
CCL_COUNT NUMBER; 
vPAT_ID VARCHAR2(20); 
vENCNTR_ID NUMBER; 
vSTM_ID NUMBER; 
vADMIN_DT DATE; 
vGIM_ID NUMBER; 
vIDM_ID NUMBER; 
vQTY NUMBER; 
vUOM_ID NUMBER; 
vMEDIUM_IDM NUMBER; 
vMEDIUM_QTY NUMBER; 
vMEDIUM_UOM NUMBER; 
vMEDIUM_GIM NUMBER; 
vPPD_ID NUMBER; 
vADMIN_TYPE VARCHAR2(50); 
vSTATUS VARCHAR2(50); 
vDOSE VARCHAR2(15); 

BEGIN 

SELECT DAD_PATIENT_ID, DAD_ENCOUNTER_ID, DAD_STM_ID, TRUNC(DAD_ADMIN_DATE), DAD_GIM_ID, DAD_IDM_ID, DAD_QUANTITY, DAD_UOM_ID, NVL(DAD_MEDIUM_IDM_ID,0), DAD_MEDIUM_QTY, DAD_MEDIUM_UOM_ID, NVL(DAD_PPD_ID,0), DAD_ADMIN_TYPE,DAD_STATUS, DAD_DOSE_NUM 
INTO vPAT_ID,vENCNTR_ID,vSTM_ID,vADMIN_DT,vGIM_ID,vIDM_ID,vQTY,vUOM_ID,vMEDIUM_IDM, vMEDIUM_QTY, vMEDIUM_UOM,vPPD_ID,vADMIN_TYPE, vSTATUS,vDOSE 
FROM DRUG_ADMIN_DETAIL 
WHERE DAD_ID = ARG_DAD_ID; 

SELECT COUNT(*) INTO CCH_COUNT FROM CURRENT_CONSUMPTION_HEADER 
WHERE CCH_STM_ID = vSTM_ID AND CCH_CONSUMPTION_TYPE = 'PATIENT' AND TRUNC(CCH_CONSUMPTION_DATE) = vADMIN_DT; 



IF ARG_VERIFY_MODE = 'VERIFY' THEN 


    UPDATE DRUG_ADMIN_DETAIL SET DAD_STATUS= 'VERIFIED' WHERE DAD_ID= ARG_DAD_ID; 

    IF vPPD_ID <> 0 THEN 

     UPDATE PATIENT_PRESCRIPTION_DETAIL SET PPD_STATUS= 'VERIFIED' WHERE PPD_ID= vPPD_ID AND PPD_STATUS= 'ADMINISTERED';  

    END IF; 

    IF CCH_COUNT = 0 THEN 

     INSERT INTO CURRENT_CONSUMPTION_HEADER(CCH_STM_ID, CCH_CONSUMPTION_DATE, CCH_CONSUMPTION_TYPE, CCH_STATUS) 
     VALUES (vSTM_ID, vADMIN_DT, 'PATIENT', 'OUTSTANDING') RETURNING CCH_ID INTO NEW_CCH_ID; 

    ELSE 

     SELECT CCH_ID INTO NEW_CCH_ID FROM CURRENT_CONSUMPTION_HEADER 
     WHERE CCH_STM_ID = vSTM_ID AND CCH_CONSUMPTION_TYPE = 'PATIENT' AND TRUNC(CCH_CONSUMPTION_DATE) = vADMIN_DT; 


    END IF; 

    INSERT INTO CURRENT_CONSUMPTION_LINE (CCL_CCH_ID, CCL_ADMISSION_NO, CCL_PATIENT_ID, CCL_IDM_ID, UOM_ID,CCL_CONS_CATOGORY, 
    CCL_CONS_FACTOR, CCL_QTY, CCL_PATIENT_NAME, CCL_SHIFT,CCL_STATUS, CCL_DAD_ID) 
    VALUES (NEW_CCH_ID,vENCOUNTER_ID, vPATIENT_ID,vIDM_ID,VUOM_ID, (SELECT GIM_CONS_CATEGORY FROM GENERIC_ITEM_MASTER WHERE GIM_ID=vGIM_ID), 
    (SELECT GIM_CONS_FACTOR FROM GENERIC_ITEM_MASTER WHERE GIM_ID=vGIM_ID),vQTY,ARG_PATIENT_NAME,vDOSE,'OUTSTANDING', ARG_DAD_ID);  

    IF vMEDIUM_QTY > 0 

     SELECT IDM_GIM_ID INTO vMEDIUM_GIM 
     FROM ITEM_dETAILS_MASTER 
     WHERE IDM_ID = vMEDIUM_IDM; 

     INSERT INTO CURRENT_CONSUMPTION_LINE (CCL_CCH_ID, CCL_ADMISSION_NO, CCL_PATIENT_ID, CCL_IDM_ID, UOM_ID,CCL_CONS_CATOGORY, 
     CCL_CONS_FACTOR, CCL_QTY, CCL_PATIENT_NAME, CCL_SHIFT) 
     VALUES (NEW_CCH_ID,vENCOUNTER_ID, vPATIENT_ID,vMEDIUM_IDM,vMEDIUM_UOM, (SELECT GIM_CONS_CATEGORY FROM GENERIC_ITEM_MASTER WHERE GIM_ID=vMEDIUM_GIM), 
     (SELECT GIM_CONS_FACTOR FROM GENERIC_ITEM_MASTER WHERE GIM_ID=vMEDIUM_GIM),vMEDIUM_QTY,ARG_PATIENT_NAME,vDOSE,'OUTSTANDING', ARG_DAD_ID); 

    END IF; 


ELSIF ARG_VERIFY_MODE = 'DEVERIFY' THEN 

    UPDATE DRUG_ADMIN_DETAIL SET DAD_STATUS= 'ADMINISTERED' WHERE DAD_ID= ARG_DAD_ID; 

    IF vPPD_ID <> 0 THEN 

     UPDATE PATIENT_PRESCRIPTION_DETAIL SET PPD_STATUS= 'ADMINISTERED' WHERE PPD_ID= vPPD_ID AND PPD_STATUS= 'VERIFIED';  

    END IF; 


    SELECT CCL_CCH_ID INTO NEW_CCH_ID FROM CURRENT_CONSUMPTION_LINE WHERE CCL_DAD_ID = ARG_DAD_ID; 

    DELETE CURRENT_CONSUMPTION_LINE 
    WHERE CCL_DAD_ID = ARG_DAD_ID; 


    DELETE CURRENT_COMSUMPTION_HEADER 
    WHERE CCH_ID = NEW_CCH_ID 
    AND (SELECT COUNT(*) FROM CURRENT_CONSUMPTION_LINE WHERE CCL_CCH_ID = NEW_CCH_ID) = 0; 


END IF; 

COMMIT; 
END; 
+1

參數沒有長度。 'arg_verify_mode'應該只是一個'varchar2'。你也不要在存儲過程中使用'declare'。 'as'開始你的聲明部分。在第一對情侶線後,我停止查找語法錯誤。 –

+0

請看看它,請修改所需的更改。我沒有得到什麼問題。@ JustinCave –

+1

你看到你聲明'arg_verify_mode'的參數列表嗎?你已經包含了一個長度。參數沒有長度。刪除長度。刪除'declare'。除此之外,從小開始建立起來是有道理的。至少這兩個語法錯誤是你的聲明。從一個不做任何事情的存儲過程開始,並讓它進行編譯。然後添加代碼廣告,確保它在每次迭代時編譯。這比試圖在一百行代碼中查找所有語法錯誤要容易得多。 –

回答

1

您的程序的簽名有三個語法錯誤。

  1. 它沒有返回值,因此它是一個過程不是一個函數
  2. 您所指定的第三個參數的長度;這對PL/SQL參數無效。
  3. DECLARE關鍵字僅用於匿名塊。對於命名的PL/SQL單元來說,這是無效的語法(IS或AS關鍵字履行了標記變量聲明部分的功能)。

所以,你的代碼應該這樣開始

CREATE OR REPLACE procedure MOBLIE_RX_VERIFICATION 
    (ARG_DAD_ID IN NUMBER, 
    ARG_PATIENT_NAME IN VARCHAR2, 
    ARG_VERIFY_MODE VARCHAR2) 
AS 
    NEW_CCH_ID NUMBER; 
1
  1. 代替 「AS」 到 「IS」
  2. 增「返回號碼「或將功能更改爲程序
+0

AS和IS是可以互換的 – APC