выводить select в файл при использовании dynamic и select возвращает больше чем строку - PullRequest
0 голосов
/ 28 февраля 2019

Прежде всего, я должен сказать, что я использую 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 ', который я ранее создал в базе данных.Тем не менее, я хочу использовать этот код в базе данных, где я не могу сделать любую вставку.поэтому я хотел бы записать в файл.Как я могу это сделать? Я ценю любую помощь.

...