Вы можете использовать другое недопустимое значение для этого значения, например NULL:
PROCEDURE foo (p_id NUMBER DEFAULT NULL) IS
l_startID NUMBER := p_id;
BEGIN
IF p_id IS NULL THEN
SELECT max(id) INTO l_startID FROM xtable;
END IF;
...
END;
Если ваша функция / процедура находится в пакете, вы также можете перегрузить it:
PROCEDURE foo (p_id NUMBER)
[...]
PROCEDURE foo IS
l_startID NUMBER;
BEGIN
SELECT max(id) INTO l_startID FROM xtable;
foo(l_startID);
END;