Vou tentar uma resposta em vez de outro comentário.
Como eu disse em um comentário, uma instrução select pura/simples não funciona em PL/SQL. Mas eu estava errado ao afirmar que você precisa de uma função armazenada para retornar um cursor ref.
Mas antes de mais nada:O tipo "id_array" que você declara em seu bloco PL/SQL é um tipo PL/SQL. Ele não pode ser usado em uma instrução de seleção de cursor ref. Em vez disso, você precisará de um tipo SQL:
create type id_array as table of number;
Isso precisa ser executado apenas uma vez, assim como uma "criar tabela".
Seu bloco PL/SQL pode ficar assim:
DECLARE
t_ids id_array;
BEGIN
UPDATE WorkerStatus
SET
StateId = :StateId
,StateReasonId = :StateReasonId
WHERE
StateId = :CurrentStateId
RETURNING Id BULK COLLECT INTO t_Ids;
OPEN :rcursor FOR SELECT * FROM TABLE(cast(t_Ids as id_array));
END;
PS:
Enquanto montava este post, percebi de onde poderia vir o ORA-00942. A matriz t_ids foi baseada em um tipo PL/SQL, que não é conhecido/disponível no lado SQL.