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;
построчное резюме
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;
Документация Oracle находится в свободном доступе через Интернет.Это довольно читабельно и полезно для начинающего пользователя. PL / SQL руководство пользователя и SQL Reference было бы хорошим началом, если бы Рэнди не ответил на вопрос к вашему удовлетворению.функция, которая передается в значении и возвращает число.Переданное значение используется для поиска таблицы, в зависимости от значения, найденного в таблице, различные значения передаются обратно.Если l_key_type (который находится в таблице), тогда значение l_key передается обратно, иначе 0.
кто-то переходит в число,
тогда, если это число не равно нулю,
запрос из таблицы check_list_answer_master для типа ключа
если этот тип 'E', то вернуть ключ как 'Встречный_ид'
в противном случае вернуть 0