Если у вас есть возможность создать функцию в своей базе данных, возможно, вы сможете получить результат функции в виде запроса, который хотите выполнить
Позвольте мне показать вам пример:
1. Я создаю таблицу с 6 столбцами.
create table test.mytest ( c1 number, c2 number , c3 number, c4 varchar2(10) , c5 number, c6 number );
2. Я создаю функцию для получения запроса (или вы можете вызывать как анонимный блок pl sql)
create or replace function test.p_gen_query ( powner in varchar2 , ptable in varchar2, p_pretty in varchar2 default 'N' )
return clob
as
vowner varchar2(40) := upper(powner);
vtable varchar2(128) := upper(ptable);
vconta pls_integer;
vsql clob;
out_string varchar2(128);
cursor c_tab_columns
is
select column_name, count(*) over () tot_rows
from all_tab_columns where table_name = vtable and owner = vowner
order by column_id;
begin
vsql := ' select ' ;
for item in c_tab_columns
loop
out_string := item.COLUMN_NAME;
if c_tab_columns%rowcount = 1 then
dbms_lob.append(vsql,out_string||' || '','' || ');
elsif c_tab_columns%rowcount < item.tot_rows then
dbms_lob.append(vsql,out_string||' || '','' || ');
else
dbms_lob.append(vsql,out_string||' from '||vowner||'.'||vtable||' ');
end if;
end loop;
if p_pretty = 'Y'
then
dbms_lob.append(vsql,''||chr(10)||'');
dbms_lob.append(vsql,' ; ');
end if;
return vsql;
end;
/
3. Вызвать функцию с p_pretty как 'N' (получить запрос без sql терминатора)
SQL> set long 99999999 longchunksize 9999 lines 9999 pages 0
SQL> select test.p_gen_query ( 'TEST' , 'MYTEST' ) from dual ;
select C1 || ',' || C2 || ',' || C3 || ',' || C4 || ',' || C5 || ',' || C6 from TEST.MYTEST
4. Вызвать функцию с p_pretty как 'Y', чтобы получить ее с sql terminator
SQL> select test.p_gen_query ( 'TEST' , 'MYTEST' , 'Y' ) from dual ;
select C1 || ',' || C2 || ',' || C3 || ',' || C4 || ',' || C5 || ',' || C6 from TEST.MYTEST
;
Таким образом, вы можете использовать его для любого запроса, который вы хотите построить таким образом. Я думаю, вы можете получить результат из Oracle Forms.