AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Variable in Select-Statement geht nicht (Stored Function)
Thema durchsuchen
Ansicht
Themen-Optionen

Variable in Select-Statement geht nicht (Stored Function)

Ein Thema von Panthrax · begonnen am 10. Aug 2009 · letzter Beitrag vom 11. Aug 2009
Antwort Antwort
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Variable in Select-Statement geht nicht (Stored Function)

  Alt 10. Aug 2009, 19:21
Datenbank: MySQL • Version: 5.1 • Zugriff über: -
Ich möchte den Mittelwert nur über einige Werte bilden, daher: "limit @Cnt"

SQL-Code:
create function M1_Mittelwert (Cnt int) returns Double
begin
  declare Result Double;
  select Avg(Abzugskraft) into Result from Messung1 order by Zeit desc limit @Cnt;
  return Result;
end $$
MySQL sagt dazu nur:
Code:
Script line: 4   You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@Cnt;
  return Result;
end' at line 4
Können für im Limit-Teil keine Variablen verwendet werden? Wie kann ich den Mittelwert nur über einige Werte bilden?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Variable in Select-Statement geht nicht (Stored Function

  Alt 10. Aug 2009, 19:43
Zitat:
Können für im Limit-Teil keine Variablen verwendet werden?
Scheint so
Zitat:
Wie kann ich den Mittelwert nur über einige Werte bilden?
-In Schleife berechnen
-Statement zur laufzeit zusammensetzen ( fall MySQL dies unterstützt)
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Variable in Select-Statement geht nicht (Stored Function

  Alt 11. Aug 2009, 00:03
Vielleicht so...
SQL-Code:
CREATE FUNCTION `func_Mittelwert`(cnt INT) RETURNS DOUBLE
BEGIN
  DECLARE result DOUBLE;

  SELECT AVG(abzugskraft) INTO result
  FROM Messung1 x
  WHERE cnt > (SELECT COUNT(*)
               FROM Messung1
               WHERE zeit < x.zeit);


  RETURN result;
END
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: Variable in Select-Statement geht nicht (Stored Function

  Alt 11. Aug 2009, 01:04
Variablen im Limit sollten denke ich klappen.
Wenn ich mich aber recht erinnere hat Limit doch 2 Parameter.
Limit (<RecordCount>, <Offset des ersten zu suchenden Datensatzes>)

[Edit]
Falls Variablen wirklich nicht unterstützt werden könntest du alternativ eine Lösung über Dynamic SQL suchen.

ungetestst, etwa so ...
SQL-Code:
CREATE FUNCTION `func_Mittelwert`(cnt INT) RETURNS DOUBLE
BEGIN
  DECLARE result DOUBLE;
  DECLARE SQLCMD VARCHAR(500)

  SET SQLCMD = 'select Avg(Abzugskraft) into @Result from Messung1 order by Zeit desc limit ' + CAST (@Cnt as VARCHAR(4)) + ';' ;
  EXEC SQLCMD;

  RETURN result;
END
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: Variable in Select-Statement geht nicht (Stored Function

  Alt 11. Aug 2009, 13:26
Den Schleifen-Ansatz habe ich verstanden, und konnte ich auch umsetzen.

Den Ansatz von Omata habe ich zwar nicht ganz verstanden, aber er funktioniert. (Ich musste für meinen Zweck nur den Vergleich drehen: Zeit > x.Zeit.) was ich nicht verstehe: Woher weiß die äußere Abfrage, über welche Werte der Mittelwert gebildet werden soll? Irgendwie steht doch da nicht mehr als bspw. "select ... from ... where 10 > 9" mit Cnt = 10...

Auf dynamisches SQL bin ich dann auch gekommen. Allerdings: "Dynamic SQL not allowed in Stored Function or Trigger." Mich würde trotzdem interessieren, wie man an das Abfrageergebnis herankommt, wenn man dynamisches SQL ausführt?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Variable in Select-Statement geht nicht (Stored Function

  Alt 11. Aug 2009, 13:35
Dynamisches SQL heisst ja nur, dass man die Abfrage zur Laufzeit zusammenbaut ( als String) und diese dann ausführen lässt.
Markus Kinzler
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#7

Re: Variable in Select-Statement geht nicht (Stored Function

  Alt 11. Aug 2009, 13:44
Angucken und gut? Kein weiteres Verarbeiten? Wozu braucht man dann dynamisches SQL?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz