Здесь есть две проблемы. Вы получаете ошибку «ORA-14551», потому что вы выполняете свою функцию в операторе SELECT, и, как ясно указывает сообщение об ошибке, мы не можем сделать это, когда функция выполняет DML. Решение этой проблемы состоит в том, чтобы выполнить это в PL / SQL или SQL * Plus.
Другая проблема состоит в том, что указатель ref является указателем на набор результатов, который может быть выбран только один раз. Ваша функция перебирает курсор ref и затем возвращает его. Это приведет к ошибке при попытке что-то сделать с возвращенным курсором ref, потому что он больше не действителен.
Да, и, кстати, любой код, который следует за оператором RETURN в функции, никогда не выполняется.