2010-12-03 14 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; 

Répondre

4

est ici un résumé ligne par ligne

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

quelqu'un passe dans un certain nombre,

alors si ce nombre est non nul,

requête de la table check_list_answer_master pour le type de clé

si ce type est 'E' revenir ensuite sur la touche comme 'encounter_id'

sinon retourner un 0

+0

pouvez-vous expliquer un peu plus en détail ce que chaque ligne fait s'il vous plaît. im nouveau tro plsql – code511788465541441

4

Le Oracle documentation est tout disponible gratuitement sur Internet. Il est assez lisible et utile pour un utilisateur novice. Le PL/SQL user guide et le SQL Reference seraient un bon endroit pour commencer si Randy n'a pas répondu à la question à votre satisfaction.

Ceci crée une fonction, qui est passée dans une valeur et renvoie un nombre. La valeur transmise est utilisée pour rechercher une table, en fonction de la valeur trouvée dans la table, différentes valeurs sont renvoyées. Si l_key_type (qui se trouve dans la table) alors la valeur de l_key est renvoyée, sinon 0.