Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 6 von 6
  1. #1
    Aufsteiger
    Registriert seit
    23.05.2013
    Beiträge
    68

    Standard SQL Statement mit Parametern manipulieren

    So nun will ich es langsam wissen mit Postgresql.
    Im MS SQL Server Umfeld habe ich öfters Abfragen die Parametrisiert sind. Dabei greifen diese stark in die Syntax ein. Um dies zu bewerkstelligen muss meist der ganze select in eine Variable gespeichert werden und anschließend muss die Variable ausgeführt werden. Wie macht man das mit Postgresql?

    Hier ein Beispiel was ich erreichen will.

    Code:
    CREATE OR REPLACE FUNCTION neu_para (get_timeback numeric, Tabellenname char(20))
    
                    RETURNS TABLE(
    
    		test varchar,
                    Zahl Numeric,
                    Zahl2 Numeric
                    )
                    AS $$
    BEGIN
                    RETURN QUERY 
    				select CAST("Timestamp_Messung" as varchar),"Wert",Tabellenname from "Zeiten" where "Wert" = get_timeback;
                    END; $$
    LANGUAGE 'plpgsql';
    Wie man sieht habe ich jetzt zwei Parameter und möchte bestimmen (über den zweiten Parameter) welche Spalte den Select noch hinzugefügt wird. Das zeigt sich im Parameter Tabellenname.
    Macht man das bei Postgresql genauso wie in der MS Welt. Sprich die Abfrage 'erstellem' in einer Variable (varchar(max)) und diese dann 'ausführen'?
    Bin über jede noch so kleine Hilfe dankbar.

  2. #2
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.212

    Standard

    Schau mal hier:
    http://stackoverflow.com/questions/1...s-a-result-set

    Ansonsten empfehle ich Dir noch, Deine Fragen etwas sorgfältiger zu stellen.
    - Syntaxhighlighting
    - Einrückung
    - ..

    Das erhöht die Chance, dass sich jemand sich das vornimmt.
    Gruß, defo

  3. #3
    Aufsteiger
    Registriert seit
    23.05.2013
    Beiträge
    68

    Standard

    Hallo defo,

    danke für den Link. Nach einiger Zeit an Suche bin ich auf folgendes gestoßen:

    https://www.teialehrbuch.de/Kostenlo...lle-lesen.html

    daraufhin habe ich folgende Funktion erstellt. Was mich jedoch wundert ist das mein Ergebnis nicht 6 Spalten enthält sondern nur eine Spalte. Die trägt den Namen der Funktion also TESTLAUF. Ebenfalls verwirrend ist für mich das ich stets meine Spalten in "" setzen muss.

    Wie bekomme ich denn nun meine Ausgabe so hin das ich mehrere Spalten sehe.

    Code:
     
    
    CREATE  OR REPLACE FUNCTION TESTLAUF (Integer) RETURNS SETOF "Zeiten" AS'
    	/*
    	SELECT "Wert","Timestamp_Messung","wert2" FROM "Zeiten" where "Wert" = $1;
    	*/
    	
    	SELECT * FROM "Zeiten" where "Wert" = $1;
    	
    'LANGUAGE sql;
    postgresql.jpg

  4. #4
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.212

    Standard

    Ich habe Dir glaube ich schon in irgendeinem der anderen Threads geschrieben, wie man auf die einzelnen Spalten zugreift.
    Gruß, defo

  5. #5
    Aufsteiger
    Registriert seit
    23.05.2013
    Beiträge
    68

    Standard

    ich nehme stark an du beziehst dich auf diesen Thread https://entwickler-forum.de/showthre...ozedur-anlegen und Post #8.
    Das habe ich auch getan, siehe aus dokumentierte Zeile im Skript. Wähle ich durch den Select alle Spalten direkt aus, so erhalte ich leider trotzdem nur eine Spalte als Ergebnis. Gleiches Ergebnis wie im angehangenen Bild. Das passt doch irgendwie nicht!

  6. #6
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.212

    Standard

    Zitat Zitat von deathdragon Beitrag anzeigen
    ich nehme stark an du beziehst dich auf diesen Thread https://entwickler-forum.de/showthre...ozedur-anlegen und Post #8.
    Das habe ich auch getan, siehe aus dokumentierte Zeile im Skript. Wähle ich durch den Select alle Spalten direkt aus, so erhalte ich leider trotzdem nur eine Spalte als Ergebnis. Gleiches Ergebnis wie im angehangenen Bild. Das passt doch irgendwie nicht!
    Nein, in Post acht wird von der fertigen Funktion selektiert, von außen, Du selektierst innerhalb dieser Funktion.
    Gruß, defo

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •