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;
答案 0 :(得分: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;
答案 1 :(得分:4)
Oracle documentation可以从互联网上免费获得。它对于新手用户来说是相当可读和有用的。如果兰迪没有满意地回答这个问题,PL/SQL user guide和SQL Reference将是一个很好的起点。
这是创建一个函数,它在值中传递并返回一个数字。传入的值用于查找表,基于表中找到的值传递不同的值。如果l_key_type(在表中找到)则返回l_key的值,否则返回0.
答案 2 :(得分:3)
然后如果该数字不为空,
从check_list_answer_master表中查询密钥类型
如果该类型为“E”,则将密钥返回为“encounter_id”
否则返回0