Прежде всего, я должен сказать, что я использую Oracle PLSQL, и это мой первый PLSQL.ну, у меня есть процедура, которую вы можете увидеть ниже.таблица, которую я использую в этом примере, называется «тест», которую вы также можете увидеть ниже.в моей процедуре я предоставляю имя таблице во время ее вызова, и сценарий просматривает все столбцы этой таблицы и группирует его по другому столбцу с именем «Имя» и возвращает 3 значения наивысшего вхождения для каждого столбца / группы по имени столбца.
create or replace PROCEDURE test_procedure (MY_TABLE in varchar2) is
BEGIN
execute immediate 'TRUNCATE TABLE T_RESULTS';
for i in ( select column_name
from all_tab_columns
where table_name = MY_TABLE
and owner = 'SYS'
)
loop
execute immediate 'insert into T_RESULTS value (
select table_name, column_name, Name, value, value_count
from (
select table_name, column_name, value, Name, value_count,
rank() over (partition by table_name, column_name, Name
order by value_count desc) as rnk
from
( select ''' || MY_TABLE || ''' as table_name, ''' || i.column_name || ''' as column_name, trim(' || i.column_name || ') as value, Name, count(trim(' || i.column_name || ')) as value_count
from ' || MY_TABLE || ' where
(case when Name in (''R3'', ''R5'')
then 1
when Name in (''R1'')
then 1
when Name in (''R2'')
then 1
Else 0
end) = 1
group by Name, trim(' || i.column_name || '))
)
where rnk between 1 and 3)';
end loop;
commit;
end;
/
и вот таблица:
create table test (
Row_id number,
Name VARCHAR2(50),
Rank number);
, которая выглядит следующим образом:
enter code here
Row_id Name Rank
1 R1 5
2 R2 1
3 R3 2
4 R3 4
5 R5 2
6 R5 6
7 R3 4
8 R7 4
9 R3 5
10 R3 7
11 R5 7
12 R5 8
13 R1 8
14 R1 9
15 R2 10
16 R2 11
В этой процедуре я записываю результаты в таблицу с именем 'T_RESULTS ', который я ранее создал в базе данных.Тем не менее, я хочу использовать этот код в базе данных, где я не могу сделать любую вставку.поэтому я хотел бы записать в файл.Как я могу это сделать? Я ценю любую помощь.