First of all, I will simply have to assume that your real code is more complex than this, since there is no reason to do something this simple with a cursor.

Given that, you are applying the wrong tool. An outer-join is used when you are combining 2 tables in a single statement. You are not. You have a second statement. You want to set 2 variables to 0 if this second statement does not return any values. Therefore:

BEGIN
---SELECT DISTINCT
------b.num1,
------b.num2
---INTO
------v_num1,
------v_num2
---FROM
------table2 b
---WHERE
------v_id=b.id;
EXCEPTION
---WHEN NO_DATA_FOUND THEN
------v_num1 := 0;
------v_num2 := 0;
---WHEN OTHERS THEN
------RAISE;
END;

Make sense?

- Chris