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;
here's a line-by-line summary
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;
The Oracle documentation is all freely available from the internet. It is fairly readable and useful for a novice user. The PL/SQL user guide and the SQL Reference would be a good place to start if Randy hasn't answered the question to your satisfaction.
This is creating a function, which is passed in a value and returns a number. The value passed in is used to look up a table, based on the value found in the table different values are passed back. If l_key_type (which is found in the table) then the value of l_key is passed back, otherwise 0.
someone passes in a number,
then if that number is not null,
query from the check_list_answer_master table for the key type
if that type is 'E' then return the key as 'encounter_id'
otherwise return a 0
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.