Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - --- MoveZeroes task solution. Kivilev DS. Oracle Developer
 - DECLARE
 - TYPE t_nums IS TABLE OF NUMBER(38);
 - v_actual_nums t_nums := t_nums(0, 12, 1, 3, 0);
 - v_expected_nums t_nums := t_nums(12, 1, 3, 0, 0);
 - PROCEDURE move_element_to_end(p_nums IN OUT NOCOPY t_nums
 - ,p_move_element_position PLS_INTEGER
 - ,p_size_limit PLS_INTEGER) IS
 - v_tmp NUMBER(38);
 - BEGIN
 - FOR i IN p_move_element_position .. p_size_limit - 1 LOOP
 - v_tmp := p_nums(i + 1);
 - p_nums(i + 1) := p_nums(i);
 - p_nums(i) := v_tmp;
 - END LOOP;
 - END;
 - FUNCTION move_zeroes(p_nums t_nums) RETURN t_nums IS
 - v_current_position NUMBER := 1;
 - v_final_position NUMBER := p_nums.COUNT;
 - v_nums t_nums := p_nums;
 - BEGIN
 - LOOP
 - EXIT WHEN v_current_position > v_final_position;
 - IF (v_nums(v_current_position) = 0) THEN
 - move_element_to_end(v_nums, v_current_position, v_final_position);
 - v_final_position := v_final_position - 1;
 - ELSE
 - v_current_position := v_current_position + 1;
 - END IF;
 - END LOOP;
 - RETURN v_nums;
 - END;
 - PROCEDURE test(p_expected_nums t_nums
 - ,p_actual_nums t_nums) IS
 - BEGIN
 - IF (p_expected_nums IS NULL OR p_actual_nums IS NULL OR p_expected_nums.COUNT != p_actual_nums.COUNT) THEN
 - raise_application_error(-20100, 'Arrays are not equals');
 - END IF;
 - FOR i IN p_expected_nums.FIRST .. p_expected_nums.LAST LOOP
 - IF (p_expected_nums(i) != p_actual_nums(i)) THEN
 - raise_application_error(-20100, 'Arrays are not equals');
 - END IF;
 - END LOOP;
 - END;
 - BEGIN
 - v_actual_nums := move_zeroes(v_actual_nums);
 - test(v_expected_nums, v_actual_nums);
 - END;
 - /
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment