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
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;
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
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.
pouvez-vous expliquer un peu plus en détail ce que chaque ligne fait s'il vous plaît. im nouveau tro plsql – code511788465541441