MYSQL Funktion mit Tabellen rückgabe

Praktikant132

Grünschnabel
Hallo,
ich bin noch recht neu hier und das is mein erster Beitrag also bitte nichts übel nehmen ;)
ich habe folgendes Problem:
Bei meiner Funktion werden verschiedene selects durchgeführt und in eine record variable geschrieben die nachher auch wieder zurück gegeben wird, allerdings will ich im grunde die einzelnen zwischenergebnisse ausgeben lassen z.b. in Form einer Tabelle mit verschiedenen Spalten, nur wird leider die variable myrow (die oben angesprochene Record variable) jedesmal überschrieben.
hier der Quellcode:
Code:
CREATE OR REPLACE FUNCTION get_csc_id_zyval( ) 
	RETURNS SETOF integer AS $$
	DECLARE
		iCount integer;
        myrow RECORD;
        BEGIN
		FOR myrow IN SELECT id from call_schedule where zyklus IS NOT NULL 
		LOOP
			select count(*) into iCount from v_csc_request_values where csc_id = myrow.id and 
				( short_name = 'DATUM_VON' or short_name = 'ORDNRVON' ) and
				value is not null;
			if iCount > 0 then
				select value into myrow from call_param where csc_id = myrow.id and cal_id is null;
				select obj_id into myrow from archivgruppe where id = myrow.value;
				return next myrow.obj_id;
			end if;
		END LOOP;
		
		return;
	END;
$$ LANGUAGE plpgsql;

ich hoffe mein Problem ist verständlich.
Ich habe schon auf diversen seiten nachgeschaut z.b. bei postgre im manual oder mich durch Seiten gegoogelt, aber nur eine hilfreiche sache gefunden uns zwar hatte jemand ein ähnliches problem, ihm wurde geraten die spalten vorher zu definieren (er hatte das problem allerdings mit einer varchar variablen). Ich habe nicht herrausgefunden wie das bei einem Record geht.
Für die Hilfe danke ich euch jetzt schonmal recht herzlich :)
Gruß
Der Praktikant^^
 
habe das Problem mittlerweile selber gelöst, danke an die Leute die sich das durch gelesen haben falls es wen interessiert und er das gleiche problem hat hier schaut euch das an:
Code:
CREATE TYPE csc_id_zyval AS ( Objname character varying(10), obj_id integer, pfad character varying(250) );

CREATE OR REPLACE FUNCTION get_csc_id_zyval( ) 
	RETURNS SETOF csc_id_zyval AS $$
	DECLARE
		iCount integer;
		recRet csc_id_zyval;
		iArcId integer;
		iObjId integer;
		Objname varchar(10);
        myrow RECORD;
        BEGIN
		FOR myrow IN SELECT id from call_schedule where zyklus IS NOT NULL 
		LOOP
			select count(*) into iCount from v_csc_request_values where csc_id = myrow.id and 
				( short_name = 'DATUM_VON' or short_name = 'ORDNRVON' ) and
				value is not null;
			if iCount > 0 then
				select name into Objname from  call_schedule where id = myrow.id;
				select value into iArcId from call_param where csc_id = myrow.id and cal_id is null;
				select obj_id into iObjId from archivgruppe where id = iArcId;
				recRet.Objname = Objname;
				recRet.obj_id = iObjId;
				recRet.pfad = get_objekt_pfad( iObjId );
				return next recRet;
			end if;
		END LOOP;
		return;
	END;
$$ LANGUAGE plpgsql;
als erstes muss man einen eigenen typ erstellen damit man dann auch die entsprechenden daten rausgeben kann
ach und sry wegen den variablen namen ect war alles was unübersichtlich oben hoffe der jetztige code is besser ^^
war ja schließlich mein "erstes mal" :)
Gruß Der Praktikant
 

Neue Beiträge

Zurück