Advertisement
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
Advertisement