ich muss für jede Spalte den count (also ohne NULL Werte) aller Einträge einer Tabelle mit sehr vielen Spalten ermitteln. Folgende Funktion ermittelt erfolgreich die Spaltennamen, jedoch erhalte ich keine Anzahl?
Kann da jemand weiterhelfen?
CREATE OR REPLACE FUNCTION oegp.columncount() RETURNS TABLE (p_name VARCHAR, p_count BIGINT)
AS $$
DECLARE
columns RECORD;
--sql_select text;
BEGIN
FOR columns IN SELECT column_name FROM information_schema.columns WHERE table_schema='oegp' and table_name ='fd_mastab01' LOOP
p_name := columns.column_name;
p_count := p_count || 'count('|| columns.column_name || ') from oegp.fd_mastab01';
RETURN NEXT;
END LOOP;
END;
$$ LANGUAGE plpgsql;
Aufruf:
select * from oegp.columncount();
ps.: ist mein erster Versuch mit plpgsql, bitte habt Nachsicht falls o.g. totaler Unsinn ist
Deine äußere LOOP-Schleife, denke ich mal, tut, was Du willst.
Aber p_count, das ist initial NULL, und ein NULL || ‘foo’ ist wieder NULL.
Weiterhin - was soll mit dem String innerhalb der Funktion passieren?
Du hast also eine INT-Variable, der Du einen STRING zuweisen willst. Oder willst Du einen String mittels EXECUTE ausführen, und das Resultat Deiner INT-Variablen übergeben?
CREATE OR REPLACE FUNCTION oegp.columncount() RETURNS TABLE (p_name VARCHAR, p_count BIGINT)
AS $$
DECLARE
columns RECORD;
sql_select text;
BEGIN
FOR columns IN SELECT column_name FROM information_schema.columns WHERE table_schema='oegp' and table_name ='fd_mastab01' LOOP
p_name := columns.column_name;
sql_select := 'select count('|| columns.column_name || ') from oegp.fd_mastab01';
EXECUTE sql_select into p_count;
RETURN NEXT;
END LOOP;
END;
$$ LANGUAGE plpgsql;