Для утилиты, которую я пишу, я хотел бы собрать все значения результата выбора (получая только одну строку!) В строку. Т.е. для такого утверждения, как
select * from some_table where some_column = 'somevalue';
(где some_column является первичным ключом этой таблицы, т. Е. Он гарантированно содержит только уникальные значения)
Я хотел бы собрать все значения в один строка типа 'value1, value2, ... , valueN'
, то есть, по сути, как часть "values (...)" оператора вставки SQL.
edit: я добавил раздел, пытаясь лучше объяснить, к чему я стремлюсь:
Ниже приведен фрагмент кода, который я придумал. В реальной жизни переменные p_table_name
, p_row_name
и p_row_value
являются аргументами, передаваемыми в мою утилиту. ИМХО, этот код кажется слишком сложным для того, чего он достигает. Я не могу не поверить, что должен быть более простой способ сделать это.
DECLARE
p_table_name VARCHAR2(30) := 'TICKET';
p_row_name VARCHAR2(30) := 'TICKET_ID';
p_row_value VARCHAR(100) := '72';
query_statement VARCHAR2(1000);
column_value VARCHAR2(1000);
p_all_row_values VARCHAR2(1000) := '';
BEGIN
for curr_col in (
select cols.column_name
from user_tab_columns cols
where cols.table_name = p_table_name
order by cols.column_id
)
loop
query_statement := 'select coalesce(to_char(' || curr_col.column_name || '), ''null'') from ' || p_table_name || ' where ' || p_row_name || ' = ' || p_row_value;
execute immediate query_statement into column_value;
p_all_row_values := p_all_row_values || ', ' || curr_col.column_name || '=' || column_value;
end loop;
p_all_row_values := SUBSTR(p_all_row_values,3);
dbms_output.put_line('values are: "' || p_all_row_values || '"');
END;
Это создает выходные данные, которые для таблицы "TICKET" и ее строк читаются, например:
values are: "TICKET_ID=72, TICKET_ID_VALUE=c32c717b33e543bbae4955e803624ffa, ERSTELLT_AM=15.01.20 16:51:04.817000, TICKET_VORGAENGER_ID=null, OPERATION_ID=1, QUELLSYSTEM_ID=2"
Примечание. В приведенном выше примере я также добавил имена столбцов плюс '=' к строке, но в реальной жизни я на самом деле просто хочу, чтобы значения, разделенные запятыми, как в моем первоначальном вопросе.
Надеюсь, я смогу прояснить ...