Ich glaube nicht, dass dies in einer einzigen Abfrage durchgeführt werden kann. Möglicherweise benötigen Sie einige plsql, um zuerst zu testen, welche Spalten Daten enthalten, und eine Anweisung basierend auf diesen Informationen zu erstellen. Wenn sich die Daten in Ihrer Tabelle ändern, müssen Sie natürlich die Anweisung neu erstellen.
declare
l_table varchar2(30) := 'YOUR_TABLE';
l_statement varchar2(32767);
l_test_statement varchar2(32767);
l_contains_value pls_integer;
-- select column_names from your table
cursor c is
select column_name
,nullable
from user_tab_columns
where table_name = l_table;
begin
l_statement := 'select ';
for r in c
loop
-- If column is not nullable it will always contain a value
if r.nullable = 'N'
then
-- add column to select list.
l_statement := l_statement || r.column_name || ',';
else
-- check if there is a row that has a value for this column
begin
l_test_statement := 'select 1 from dual where exists (select 1 from ' || l_table || ' where ' ||
r.column_name || ' is not null)';
dbms_output.put_line(l_test_statement);
execute immediate l_test_statement
into l_contains_value;
-- Yes, add column to select list
l_statement := l_statement || r.column_name || ',';
exception
when no_data_found then
null;
end;
end if;
end loop;
-- create a select statement
l_statement := substr(l_statement, 1, length(l_statement) - 1) || ' from ' || l_table;
end;
Ihre Frage ersetzt ist ziemlich unklar. Wie geschrieben, sieht es so aus, als würden Sie * ALLE * Zeilen aus einer Tabelle AUSWÄHLEN? Ist das wirklich was du willst? Oder wollen Sie eine WHERE-Klausel einschließen und nur die Zeilen auswählen, die in den interessierenden Spalten Nicht-Null-Werte enthalten? Oder möchten Sie alle Spalten auswählen, die für alle Zeilen nicht nullbar sind? Könnten Sie bitte erläutern? –
Ich finde die Frage ziemlich klar. Er möchte nur die Spalten auswählen, für die mindestens eine Zeile Daten enthält. Eine WHERE-Klausel würde das natürlich noch schwieriger machen. – Thilo
Was möchten Sie mit den Daten machen? Wo wird es verwendet werden? – shahkalpesh