Проблема в том, что ваш запрос выбирает нормальную проекцию:
select * from temp_table;
Это нормально, если вы не пытаетесь заполнить таблицу объектов.Для этого вам нужно вернуть данные из temp_table
cast в ваш тип.
Я не знаю проекцию вашей базовой таблицы, поэтому предположу, что имена столбцов соответствуют атрибутам типа.Но что угодно, вам нужно что-то вроде этого:
select user_tmp(tt.id, tt.name, tt.section) from temp_table tt;
Кстати, почему это строка?Ваша процедура не нуждается в динамическом SQL.Это будет работать так же хорошо.
OPEN v_cursor FOR select user_tmp(tt.id, tt.name, tt.section) from temp_table tt;