Я пытаюсь напечатать несколько строк таблицы, где мы не знаем имя столбца. Я пробую это с одного дня, и я придумал эту процедуру с ошибкой «должен объявить emp_dummy_col». Пожалуйста, помогите мне. Спасибо.хранимая процедура с динамическим именем столбца
create or replace procedure sp_display
as
CURSOR cur_emp is select EMP_ID,EMP_NAME,DEPT_IT,DOJ,LOCATION from employee;
emp_rows cur_emp%rowtype;
type emp_table is table of emp_rows%type;
emp_dummy_table emp_table;
CURSOR cur_col is select column_name from user_tab_cols where table_name ='EMPLOYEE';
emp_row cur_col%rowtype;
type emp_table1 is table of emp_row%type;
emp_dummy_col emp_table1;
begin
open cur_emp;
fetch cur_emp bulk collect into emp_dummy_table;
close cur_emp;
open cur_col;
fetch cur_col bulk COLLECT into emp_dummy_col;
close cur_col;
for i in 1..emp_dummy_table.count
loop
for j in 1..emp_dummy_col.count
loop
DBMS_OUTPUT.PUT_LINE(emp_dummy_table(i).emp_dummy_col(j));
end loop;
end loop;
end;
Что вы на самом деле пытаетесь сделать? Динамический доступ к полям в записи будет болезненным - вам придется динамически строить весь блок PL/SQL в строковой переменной. Я предполагаю, что все, что вы действительно пытаетесь выполнить, было бы проще, используя динамический SQL, а не динамический PL/SQL. –
так что можно сделать. Спасибо –
Вы знаете столбцы из основного запроса cur_emp - вы явно выбираете «EMP_ID» и еще четыре. Почему бы и не ссылаться на них явно? Если есть другие столбцы, которые вы не выбираете, они будут включены в ваш запрос cur_col, но в emp_dummy_table не будет соответствующего поля, так что вы ожидаете от них? Не совсем понятно, почему вы делаете это вообще, а не просто запрашиваете таблицу в SQL. –