В Oracle 12c R2 у меня есть функция, которая получает тип строки в качестве переменной.В функции, которую я хочу прочитать таблицу, которая содержит имя столбца и значение, я хочу затем заполнить переданную переменную типа строки, используя имя столбца и данные из таблицы, которую я прочитал.
Здесьупрощенное представление о том, что я хочу сделать;
CREATE TABLE table_to_be_updated
(
key_value number,
cola varchar2(2),
colb varchar2(2),
colc varchar2(2),
cold varchar2(2),
cole varchar2(2),
colf varchar2(2)
);
CREATE TABLE table_default_value
(
default_stuff number,
column_name varchar(30),
column_default_value varchar2(2)
);
function do_defaults(in_table table_to_be_updated%rowtype, in_value number) return table_to_be_updated%rowtype
is
out_table table_to_be_updated%rowtype := in_table;
cursor my_curs
is
select * from table_default_value where default_stuff = in_value;
begin
for default_rec in my_curs
loop
out_table.[default_rec.column_name] := default_rec.column_default_value
end loop;
return out_table;
end;
insert into table_default_value (default_stuff,column_name,column_default_value) values (1,'cola','xx'));
insert into table_default_value (default_stuff,column_name,column_default_value) values (1,'colc','aa'));
insert into table_default_value (default_stuff,column_name,column_default_value) values (1,'cole','bb'));
в строке;
out_table.[default_rec.column_name] := [default_rec.column_default_value]
[default_rec.column_name] будет именем столбца от курсора в out_table nameЯ хочу переместить данные в.
и
[default_rec.column_default_value] - значение из курсора, который я хочу переместить в этот столбец.
Я подозреваю, что то, что ясделать это невозможно в PL / SQL, но я подумал:
Существуют и другие способы непосредственного обновления таблицы, в частности использование динамического SQL с непосредственным выполнением, но у меня есть ряд подобныхтаблиц, для которых все должны выполнять одни и те же действия, и я бы предпочел, чтобы одна запись работала с записью, а затем передавала ее обратно, чтобы вызывающая подпрограмма обновляла соответствующую таблицу.