2010-12-03 421 views
0
FUNCTION encounter_for_dataset(p_check_answer_master_id IN check_list_answer_master.check_answer_master_id%TYPE) RETURN NUMBER 
    IS 

    l_key_type  check_list_answer_master.key_type%TYPE; 
    l_key   check_list_answer_master.key%TYPE; 
    l_encounter_id NUMBER := 0; 

    BEGIN 

    IF p_check_answer_master_id IS NOT NULL THEN 

     SELECT clam.key_type, NVL(clam.key,'0') 
     INTO l_key_type, l_key 
     FROM check_list_answer_master clam 
     WHERE clam.check_answer_master_id = p_check_answer_master_id; 

     IF l_key_type = 'E' THEN 

     BEGIN 
      l_encounter_id := TO_NUMBER(l_key); 
     EXCEPTION 
      WHEN OTHERS THEN 
      l_encounter_id := 0; 
     END; 

     END IF; -- l_key_type = 'E' 

    END IF; -- p_check_answer_master_id is not null 

    RETURN l_encounter_id; 

    END encounter_for_dataset; 

回答

4

這裏有一個行由行總結

FUNCTION encounter_for_dataset(
    p_check_answer_master_id IN check_list_answer_master.check_answer_master_id%TYPE 
    --this is the input variable (note the table.column%type this forces the variable to adhere that the column type if it changes 
    ) RETURN NUMBER --what type to return 
    IS 
    /** declaration section, note it is using the table.column%type --this is good practice in case they change 
    */ 
    l_key_type  check_list_answer_master.key_type%TYPE; 
    l_key   check_list_answer_master.key%TYPE; 
    l_encounter_id NUMBER := 0; 

    BEGIN 
    --if the passed in value is NOT null do the logic within the IF statement 
    IF p_check_answer_master_id IS NOT NULL THEN 


     --insert key_type into l_key_type, 
     --and insert the key (if null then 0) into l_key 
     --where the check_answer_master_id is equal to the passed in variable 
     --DO NOTE, IF THERE is NO DATA FOUND it will throw a NO_DATA_FOUND exception which is not handled 
     SELECT clam.key_type, NVL(clam.key,'0') 
     INTO l_key_type, l_key 
     FROM check_list_answer_master clam 
     WHERE clam.check_answer_master_id = p_check_answer_master_id; 

     -- if the key type is e, then 'cast' the l_key into a number 
     --when any exception happens during the 'cast' just set it to 0 
     IF l_key_type = 'E' THEN 

     /**this begin..end block allows encapsulation of exception logic as it is used, pretty much a nested try/catch within the function -- this error will not bubble up to the calling program, whereas if the p-check_answer_master_id is not in clam, then that error will bubble up*/ 
     BEGIN 
      l_encounter_id := TO_NUMBER(l_key); 
     EXCEPTION 
      WHEN OTHERS THEN 
      l_encounter_id := 0; 
     END; 

     END IF; -- l_key_type = 'E' 

    END IF; -- p_check_answer_master_id is not null 

     --retrun the value (note it defaults to 0) 
    RETURN l_encounter_id; 

    END encounter_for_dataset; 
3

有人經過若干,

那麼,如果這個數字不爲空,從check_list_answer_master表

查詢密鑰類型

如果該類型是 'E' 則返回鍵爲 'encounter_id'

否則返回0

+0

您能否更詳細地解釋每行請問的內容。即時通訊新的plsql – code511788465541441 2010-12-03 14:12:45

4

Oracle documentation都是可以免費從互聯網。它對於新手用戶來說是相當可讀和有用的。 PL/SQL user guideSQL Reference將是一個很好的開始如果蘭迪沒有回答你的滿意的問題。

這是創建一個函數,它傳入一個值並返回一個數字。傳入的值用於查找表,根據表中找到的值返回不同的值。如果l_key_type(在表中找到),則返回l_key的值,否則返回0.

相關問題