Это возможно для запуска динамического SQL в SQL, но решения болезненны.Самый простой способ использует пакет DBMS_XMLGEN
и не требует никаких дополнительных объектов PL / SQL.
Приведенный ниже пример работает, но нереально прост.Реальная версия будет иметь дело со многими проблемами преобразования типов, извлечения других значений и т. Д.
--Read a value based on the CONTROL table.
select
to_number(extractvalue(xml, '/ROWSET/ROW/COL')) COL
from
(
select xmltype(dbms_xmlgen.getxml(v_sql)) xml
from
(
select 'select '||colname||' col from transaction' v_sql
from control
)
);
COL
---
2
Результаты основаны на этом примере схемы:
--Sample schema:
create table control
(
COLID number,
COLNAME varchar2(4000),
FLAG number
);
insert into control values(1,'NAME',1);
create table transaction
(
TXID number,
NAME varchar2(100),
DESCRIPTION varchar2(4000),
the_GROUP varchar2(100),
the_DATE date,
TYPE varchar2(100),
AMOUNT number
);
insert into transaction values(1,2,3,4,sysdate,6,7);
commit;
Если у вас есть большесложный запрос требует, например, если вам нужно вернуть неизвестное количество столбцов, вам нужно установить что-то вроде моей программы с открытым исходным кодом Method4 .Эта программа допускает динамический SQL в SQL, но для этого требуется сначала установить несколько новых объектов.
На практике такой уровень динамического SQL редко требуется.Обычно лучше найти более простой способ решения проблемы.