Announcement

Collapse
No announcement yet.

SQL Statement mit Parametern manipulieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    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

    Comment


    • #3
      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

      Comment


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

        Comment


        • #5
          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!

          Comment


          • #6
            Originally posted by deathdragon View Post
            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

            Comment

            Working...
            X