Это первый раз, когда я пытаюсь написать PL / SQL.
У меня есть таблица T_TRANSACTION
с несколькими столбцами.Я хочу, чтобы мой PL / SQL первоначально извлекал отдельные значения определенного столбца с именем mandant
и сохранял его в курсоре.затем я хочу написать цикл for, в котором для каждого mandant
из курсора мой основной запрос делает некоторые вещи.
Основной запрос - это базовый выбор, который, очевидно, не работает в PL / SQL, и именно поэтому я использовал выбор в, и так как он возвращает более 1 строки, я увидел, что я должен использовать сбор в BULK.У меня есть готовый pl / sql сейчас, который технически работает, но я не могу вывести результаты (не могу правильно использовать DBMS_OUTPUT.PUT_LINE
), и поэтому я не знаю, если это правильно.вот PL / SQL:
declare
cursor c1 is
SELECT distinct mandant from T_TRANSACTION;
type mytab is table of VARCHAR2(20);
colname mytab := mytab();
colval mytab := mytab();
colcount mytab := mytab();
BEGIN
for i in c1
loop
select 'PARTNER_ID' as column_name, to_char(col), cnt bulk collect into colname, colval, colcount
from (select PARTNER_ID as col, count(*) as cnt
from T_TRANSACTION
where SML like '181031%A' and mandant = i.mandant
group by PARTNER_ID
order by count(*)desc)
where rownum <=3
connect by level <=3;
end loop;
-- DBMS_OUTPUT.PUT_LINE (colname || colval || colcount);
end;
и это моя таблица T_TRANSACTION
:
CREATE TABLE T_TRANSACTION
( MANDANT CHAR(5 CHAR),
SML VARCHAR2(15 BYTE),
RUN CHAR(1 CHAR),
SL_PARTNER_RISK VARCHAR2(20 BYTE),
GESCHAEFT_ID VARCHAR2(20 BYTE),
PARTNER_ID VARCHAR2(20 BYTE),
TRANS_ID VARCHAR2(20 BYTE);
в запросе ниже я получаю верхние 3 значения столбца PARTNER_ID
за каждый mandant
от курсора.
Мой второй вопрос на самом деле: как я могу сделать это для всех столбцов таблицы, не повторяя запрос?Позже я хочу использовать это для многих разных таблиц, и поэтому я хочу извлечь столбец для каждой таблицы, например, из all_tab_columns, а затем выполнить запрос, который я разместил для всех столбцов каждой таблицы.Но я не знаю, как это сделать в PL / SQL.Я ценю любую помощь:)