Вам необходимо сохранить результат оператора SELECT в переменной. Когда вы выполняете SELECT * ..., вы должны поместить результат в тип RECORD, но, поскольку набор результатов содержит более 1 строки, ваша переменная должна быть таблицей записей.
Чтобы неБудьте подвержены ошибкам, таблицы записей должны быть точно такими же, как ваша исходная структура таблицы.
CREATE OR REPLACE PROCEDURE OFFC.TEMP_SEL(DATA1 VARCHAR2) IS
VAR1 VARCHAR2(4000);
TYPE T_RESULT IS TABLE OF offc.temp%ROWTYPE;
-- defined the new type based on the structure of table TEMP from schema OFFC
v_result t_result;
-- define a variable of that type.
BEGIN
var1:='select * from offc.temp'||data1;
EXECUTE IMMEDIATE VAR1 BULK COLLECT INTO V_RESULT;
-- collect he result into the new variable
FOR I IN 1 ..v_result.count
LOOP
dbms_output.put_line(v_result(i).<<column_name from temp offc.table>>);
end loop;
-- loop through the variable(table of records) and display its content.
-- you need to replace the << ... >> with the name of your column from source tabel that you want to display.
end;
Для выполнения процедуры вы должны использовать:
set serveroutput on;
execute temp_sel( 'ash');
Best, Mikcutu